题意:

有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi。现在要选出尽量多的点。
对于任意一棵子树,都要满足:
如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值
如果在左子树选了一个点,在右子树中选的其他点要比它
思路:
按照根节点-右子树-左子树的顺序建立dfs序列,然后求lis即可
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>
#include<functional>#define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1
#define lowbit(x) ((x)&(-x)) using namespace std;typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL;const db eps = 1e-6;
const int mod = 1e9+7;
const int maxn = 2e6+100;
const int maxm = 2e6+100;
const int inf = 0x3f3f3f3f;
const db pi = acos(-1.0);
int a[maxn];
vector<int>v;
int l[maxn],r[maxn];
void dfs(int x){v.pb(a[x]);if(r[x])dfs(r[x]);if(l[x])dfs(l[x]);return;
}
int low[maxn],f[maxn];
int main() {int n;v.pb(0);scanf("%d", &n);for(int i = 1; i <= n; i++){scanf("%d", &a[i]);}for(int i = 1; i <= n; i++){scanf("%d %d", &l[i], &r[i]);}dfs(1);int cnt = 0;mem(low,-1);for(int i = 1; i <= n; i++){int t;t = lower_bound(low+1,low+1+cnt,a[i])-low;f[i]=t;cnt=max(cnt,t);low[t]=a[i];}return 0;
}

转载于:https://www.cnblogs.com/wrjlinkkkkkk/p/10357957.html

牛客练习赛39 B 选点(dfs序+LIS)相关推荐

  1. 牛客练习赛39 B.选点

    链接:https://ac.nowcoder.com/acm/contest/368/B 来源:牛客网 题目描述 有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi.现在要选出尽量多的点. 对于 ...

  2. 牛客练习赛39 B:选点(二叉树遍历+LIS)

    链接: https://ac.nowcoder.com/acm/contest/368/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262 ...

  3. 树的距离(牛客网树上主席树+dfs序)

    链接:https://ac.nowcoder.com/acm/problem/14415 来源:牛客网 题目描述 wyf非常喜欢树.一棵有根数树上有N个节点,1号点是他的根,每条边都有一个距离,而wy ...

  4. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  5. 牛客练习赛54(A,B,C(ATCG相同的分在一起 暴力加巧妙差分))

    牛客练习赛54 日常刷一套牛客练习赛题 A-乘积 n这么小 暴力即可,不知道unsinged long long 操作,用java大数写了: import java.math.BigInteger; ...

  6. 牛客练习赛76 F-phi and phi 莫比乌斯反演+差分

    牛客练习赛76 F-phi and phi 莫比乌斯反演+差分 题意 思路 Code(445MS) 传送门: https://ac.nowcoder.com/acm/contest/10845/F 题 ...

  7. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  8. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  9. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

最新文章

  1. Android 框架炼成 教你怎样写组件间通信框架EventBus
  2. 关于数据集 使用PutCollect后m_Recordset-Update();数据集更新报错的问题
  3. 对当前目录及子目录下的所有源码文件及Makefile打包
  4. c++ tinyxml2 解析xml小坑
  5. abp+dapper+mysql_ABP公共结构 – 时间与时区设置 - ABP 中文文档
  6. Motion and Optical Flow
  7. socket之远程执行命令
  8. word 中快速加入序号等符号
  9. msxml 6.0 dll 导入问题
  10. [精简]托福核心词汇98
  11. JDK 1.8 中的 Timer 类
  12. 二阶魔方入门玩法教程
  13. 并行与分布式计算导论(六)MPI入门
  14. 数值计算与MATLAB微积分
  15. Android系统日历读取各厂商农历年重复event
  16. AquaCrop_原理学习笔记08:胁迫系数和冠层发育
  17. 一阶广义差分模型_4.2 序列相关性_清华大学:计量经济学(李子奈博导)_ppt_大学课件预览_高等教育资讯网...
  18. OTB 2013 使用教程
  19. 利用EXCEL提取出生年月(格式自定义)、计算年龄、判断性别
  20. 三星PM9A1 00B00公版7801Q固件分享及升级教程

热门文章

  1. python函数的使用场景_详解python中strip函数的使用场景
  2. iphone模拟器_iPhone 上玩真的 PSP 游戏,支持 iOS 13 系统
  3. 高级排序之分割法(以某数为基准分割)
  4. 隐藏html和php后缀的简易方法
  5. 各版SQL字符串拼接
  6. 【建站知识】如何让我们的网站更快?如何开启全站阿里域名加速?...
  7. 基于SSM的Java Web应用开发原理初探
  8. 47. Python socket编程 2
  9. 如何在无显示器的ubuntu下跑selenium
  10. Dropping Balls(小球下落)