B.选点
2024-08-30 08:12:01
链接:https://ac.nowcoder.com/acm/contest/368/B
题意:
有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi。现在要选出尽量多的点。
对于任意一棵子树,都要满足:
如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值大;
如果在左子树选了一个点,在右子树中选的其他点要比它小。
思路:
题目不懂啥意思。看题解才知道,是可以任意选点。。。
直接按照中右左顺序遍历。
这样选点满足要求。
再LIS即可。
代码:
#include <bits/stdc++.h>
using namespace std; const int MAXN = 1e5 + 10; int W[MAXN];
int L[MAXN],R[MAXN];
int Res[MAXN],dp[MAXN];
int pos = 0; void Dfs(int x)
{
if (x == 0)
return;
Res[++pos] = x;
Dfs(R[x]);
Dfs(L[x]);
} int main()
{
int n;
cin >> n;
for (int i = 1;i <= n;i++)
cin >> W[i];
for (int i = 1;i <= n;i++)
cin >> L[i] >> R[i];
Dfs(1);
for (int i = 1;i <= n;i++)
Res[i] = W[Res[i]];
pos = 1;
dp[1] = Res[1];
for (int i = 2;i <= n;i++)
{
if (Res[i] > dp[pos])
{
dp[++pos] = Res[i];
}
else
{
int x = lower_bound(dp + 1, dp + 1 + pos, Res[i]) - dp;
dp[x] = Res[i];
}
}
cout << pos << endl; return 0;
}
最新文章
- CozyRSS开发记录0-RSS阅读器开坑
- html/css小练习1
- 安装和配置Mantis<;项目管理工具>;
- C#迭代重载等
- 《DSP using MATLAB》示例Example4.3 双边序列
- ios UILocalNotification的使用
- tiledmap2
- LevelDB源码之四LOG文件
- 精雕细琢 35 套精美的 PSD 图标素材
- THE ROAD TO PROGRAM
- A1088. Rational Arithmetic
- spring ,springmvc,mybatis 最基本的整合,没有多余的jar包和依赖 2018.9.29日
- 队列queue的一些操作
- 【转载】systemctl命令完全指南
- spring整合mybatisXML版
- 【原】关于AdaBoost的一些再思考
- MACD各分时背离所对应的时间
- docker安装testlink
- Alpha冲刺报告(6/12)(麻瓜制造者)
- 高精度减法用string 和 stack
热门文章
- [shell] Bash编程总结
- Redis雪崩效应以及解决方案
- python不同目录下的调用
- Jquery Plugin模版
- 运行swoole_server方法
- MySQL丨5.6版本插入中文显示问号解决方法
- dyld: could not load inserted library &#39;/Developer/usr/lib/libBacktraceRecording.dylib&#39; because no suitable image found. Did find:
- vue.js created函数注意事项
- C++之引用&;的详解
- bzoj2875随机数生成器——矩阵快速幂