我不会告诉你这是线段树合并的好题的。。。

好吧我们可以搞一个multiset在dfs时求出LIS(自带二分+排序)进行启发式合并,轻松加愉悦。。。

#include<cstdio>
#include<iostream>
#include<set>
const int N=;
#define R register int
using namespace std;
inline int g() {
R ret=; register char ch; while(!isdigit(ch=getchar()));
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret;
}
int n,m,cnt;
multiset<int>s[N];
int vr[N<<],nxt[N<<],fir[N],w[N];
inline void add(int u,int v) {vr[++cnt]=v,nxt[cnt]=fir[u],fir[u]=cnt;}
inline void dfs(int u) {
for(R i=fir[u];i;i=nxt[i]) { R v=vr[i];
dfs(v); if(s[u].size()<s[v].size()) swap(s[u],s[v]);
for(multiset<int>::iterator it=s[v].begin();it!=s[v].end();++it) s[u].insert(*it);
} multiset<int>::iterator it=s[u].lower_bound(w[u]); if(it!=s[u].end()) s[u].erase(it);
s[u].insert(w[u]);
}
signed main() {
n=g(); for(R i=,fa;i<=n;++i) {
w[i]=g(),fa=g(); if(i==) continue; add(fa,i);
} dfs(); printf("%d\n",s[].size());
}

2019.04.20

最新文章

  1. Sqlserver查询结果,让某列结果合并一列并且逗号分隔。
  2. 基于ruby的watir自动化测试 笔记一
  3. Android Studio配置指南总结
  4. Cheatsheet: 2015 08.01 ~ 08.31
  5. 九宫格抽奖HTML+JS版
  6. TYVJ P1072 bomb Label:看不懂题意
  7. Android网络编程系列 一 Socket抽象层
  8. 使用eclipse远程调试Tomcat的方法
  9. Cracking the coding interview
  10. js得到分页栏
  11. css的单位
  12. unlink()
  13. iOS下WebRTC音视频通话(一)
  14. Android进程间通信IPC
  15. Django-3-Template模板
  16. 利用mybatis generator实现数据库之间的表同步
  17. 使用Java打印字符串表格(中英文内容不乱)
  18. MR目录结构
  19. Python在Win10系统的安装和使用配置
  20. PageObject&amp;PageFactory

热门文章

  1. [SHOI2017]期末考试
  2. ACM学习历程—HDU1041 Computer Transformation(递推 &amp;&amp; 大数)
  3. 构建嵌入式小型Linux系统
  4. Exchange邮箱设置,android手机和mac book
  5. linux python 更新版本
  6. Poj 3903 Stock Exchange(LIS)
  7. poj 2000 Gold Coins(水题)
  8. JVM插码之三:javaagent介绍及javassist介绍
  9. Linux/Unix 指令使用说明的格式介绍(the Bash Command &#39;Usage&#39; Syntax)
  10. p2345 奶牛集会