题意:
有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi。现在要选出尽量多的点。
对于任意一棵子树,都要满足:
如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值大;
如果在左子树选了一个点,在右子树中选的其他点要比它小。

题解:
要满足
根节点的值最小,左子树的值大于右子树的值。
这样的话我们可以先按照根->右->左的顺序来求出一个dfs序
然后求一下LIS即可。

/*Keep on going Never give up*/
//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long#define endl '\n'
#define Accepted 0
#define AK main()
#define I_can signed
using namespace std;
const int maxn =2e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll mod=1e9+7;int cnt,tot;
int v[maxn];
int ls[maxn],rs[maxn];
int ans[maxn];
int ok[maxn];
void dfs(int x){if(!x) return ;ans[++tot]=v[x];dfs(rs[x]);dfs(ls[x]);
}signed main(){ios::sync_with_stdio(false);int n;cin>>n;for(int i=1;i<=n;i++){cin>>v[i];}for(int i=1;i<=n;i++){int x,y;cin>>x>>y;ls[i]=x;rs[i]=y;}dfs(1);//for(int i=1;i<=n;i++) cout<<ans[i]<<" ";ok[++cnt]=ans[1];for(int i=2;i<=n;i++){if(ans[i]>ok[cnt]) ok[++cnt]=ans[i];else{int pos=upper_bound(ok+1,ok+1+cnt,ans[i])-ok;ok[pos]=ans[i];}}cout<<cnt<<endl;return 0;}

选点(dfs序+LIS)相关推荐

  1. 牛客练习赛39 B 选点(dfs序+LIS)

    题意: 有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi.现在要选出尽量多的点. 对于任意一棵子树,都要满足: 如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值大: 如果在左子树选 ...

  2. 【牛客 - 368B】选点(dfs序,LIS 或 dfs序 + 树状数组 + 离散化,树状数组求LIS的方法)

    题干: 有一棵n个节点的二叉树,1为根节点,每个节点有一个值wi.现在要选出尽量多的点. 对于任意一棵子树,都要满足: 如果选了根节点的话,在这棵子树内选的其他的点都要比根节点的值大: 如果在左子树选 ...

  3. 【2021牛客暑期多校训练营7】xay loves trees(dfs序,维护根出发的链)

    F xay loves trees 题意: 给出两棵树,由这两棵树根据规则可以生成一个图,规则如下:如果u , v在第一棵树中满足其中一个点是另一个点祖先且最终所有所选的点都互相联通,在第二棵树中满足 ...

  4. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  5. A and B and Lecture Rooms CodeForces - 519E LCA+dfs序

    看到这个题的第一个思路就是就是统计以每一个点为根的所有节点个数,然后具体就分情况讨论一下即可. 因为刚刚学习了dfs序,这个题就用了dfs序来通过进出时间戳来相减表示其为根的子节点个数. 分情况 我们 ...

  6. POJ - 2763 Housewife Wind LCA+dfs序+线段树

    q次询问求两个点之间的距离,并且可以随时修改某条边的长度,最短距离可以用lca来求,但是树上维护每一个点到root的距离必须要用dfs序来记录时间戳,在dfs的时候顺便记录每一条边(u,v)对应的v节 ...

  7. New Year Tree(dfs序+线段树+二进制)

    题意: 给出一棵 n个节点的树,根节点为 1.每个节点上有一种颜色 ci.m次操作.操作有两种: 1 u c:将以 u为根的子树上的所有节点的颜色改为c. 2 u:询问以 u为根的子树上的所有节点的颜 ...

  8. [codeforces] 383C Propagating tree(dfs序+线段树)

    题意: 给你一棵n个结点的树, 以1为根.每个结点有点权.有m次操作: 1.x结点权值 +val,x的儿子权值 −val,x的孙子们 +val,以此类推. 2.询问x的点权: 题解: 我们首先跑一边d ...

  9. 求和(dfs序+线段树)

    题意: 已知有n个节点,有n−1条边,形成一个树的结构. 给定一个根节点k,每个节点都有一个权值,节点i的权值为vi​. 给m个操作,操作有两种类型: 1 a x :表示将节点a的权值加上x 2 a ...

最新文章

  1. 2020年PHP中级面试知识点及答案
  2. Nature:中国正在上演AI人才争夺战,中国公司在与Google竞争
  3. 生产事故 java_记一次生产事故:30万单就这样没了!
  4. mysql平滑关闭_MySQL平滑删除数据的小技巧
  5. 使用命名空间解决名字冲突
  6. java重载_Java的重载与覆盖,傻傻分不清!
  7. ajax回调打开新窗体防止浏览器拦截方法
  8. 快速迁移 Next.js 应用到函数计算
  9. 百科系列——高一所遇
  10. 645. 错误的集合
  11. 57. mysqli 扩展库(4)
  12. cad工具箱详细讲解_AutoCAD学院派工具箱(XCAD)使用教程(图文解说)
  13. iPhone5捣鼓mobile terminal
  14. Redis 下载安装
  15. HTML5的数据存储和数据处理的功能有,浅析 HTML5 数据存储的方法及应用
  16. git pull 报错:error: Pulling is not possible because you have unmerged files.
  17. 作为项目经理你应该掌握的关键链法
  18. Spring Data ElasticSearch 3.2版本发布,相关新特性说明
  19. 俏兔子大战傻贼鹰(刚开始接触是写的,一直在草稿箱)
  20. 国内免费(开源)CMS系统【大全】

热门文章

  1. ida 调试中call stack如何打开|修改数值
  2. CVPR | 让合成图像更真实,上交大提出基于域验证的图像和谐化
  3. 基于OpenCV提取特定区域方法汇总
  4. 深度学习以及卷积基础
  5. 2020新款手机,吃鸡贼爽!包邮送一个!
  6. 深入TCP/IP协议1---图解OSI参考模型
  7. 同源注释工具GeneWise安装和使用
  8. 请求路径@PathVariable与请求参数@RequestParam的区别
  9. linux驱动开发要知道的那些知识(三)------container_of,定时器 及系统调用
  10. Spring研究笔记------事务探究