[BZOJ4919][Lydsy六月份月赛 .C][树上DP][启发式合并]大根堆
来源:互联网 发布:甘肃网络电视台回播 编辑:程序博客网 时间:2024/06/05 07:12
用f[i][j]表示第i个节点,最大的为j且满足条件的大根堆的大小
现场写了一个很鬼畜的线段树合并DP数组……一直RE加上时间不够就弃疗了
不过好像是有类似的做法,先挖个坑……
题解很妙啊,考虑链上的情况就是求LCS,求LCS可以用f[i]表示长度为i的子序列的最大是多少然后二分维护,那么放到树上同样可以做,用set维护。子树之间互不影响,直接启发式合并,父节点在子树合并得到的set中找到第一个大于等于它的元素删掉,然后把自己插进去,最后根节点set的大小就是答案
#include <cstdio>#include <iostream>#include <algorithm>#include <set>using namespace std;const int N=200010;int n,cnt,x;int G[N],a[N];struct edge{ int t,nx;}E[N<<1];multiset<int> f[N];inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline void rea(int &x){ char c=nc(); x=0; for(;c>'9'||c<'0';c=nc());for(;c>='0'&&c<='9';x=x*10+c-'0',c=nc());}inline void add(int x,int y){ E[++cnt].t=y; E[cnt].nx=G[x]; G[x]=cnt; E[++cnt].t=x; E[cnt].nx=G[y]; G[y]=cnt;}#define V E[i].tvoid dfs(int x,int p){ for(int i=G[x];i;i=E[i].nx) if(V!=p){ dfs(V,x); if(f[V].size()>f[x].size()) swap(f[x],f[V]); for(set<int>::iterator j=f[V].begin();j!=f[V].end();j++) f[x].insert(*j); f[V].clear(); } if(f[x].size()>0&&f[x].lower_bound(a[x])!=f[x].end()) f[x].erase(f[x].lower_bound(a[x])); f[x].insert(a[x]);}int main(){ rea(n); rea(a[1]); rea(x); for(int i=2;i<=n;i++) rea(a[i]),rea(x),add(x,i); dfs(1,0); printf("%d\n",(int)f[1].size()); return 0;}
阅读全文
0 0
- [BZOJ4919][Lydsy六月份月赛 .C][树上DP][启发式合并]大根堆
- [BZOJ4917][Lydsy六月份月赛 .A][模拟]Hash Killer IV
- [BZOJ4920][Lydsy六月份月赛 .D][数学][三分]薄饼切割
- BZOJ5072[Lydsy十月月赛] 小A的树 解题报告【树上背包/树形DP】
- [BZOJ4921][Lydsy六月份月赛 .E][二分][瞎搞]互质序列
- [BZOJ4923][Lydsy六月份月赛 .G][平衡树]K小值查询
- 树上启发式合并
- 【算法】树上启发式合并算法
- Lydsy八月份月赛
- BZOJ 5072 [Lydsy 十月月赛] 树DP 解题报告
- [bzoj4919]大根堆
- codeforces600E Lomsat gelral -- 树上启发式合并
- Codeforces 714D [树上启发式合并][Hash]
- bzoj 5072: [Lydsy十月月赛]小A的树 树形dp
- BZOJ 5072: [Lydsy十月月赛]小A的树 树形dp
- poj1741:Tree (树上点分治/treap+启发式合并)
- 学习总结:Dsu on tree 树上启发式合并
- Codeforces 600E Lomsat gelral 树上启发式合并
- RecyclerView横向和竖向滑动冲突
- display:table,布局自动分宽度
- 2html基本介绍
- Android 中的倒计时 CountDownTimer
- SDN在云数据中心的应用——架构篇
- [BZOJ4919][Lydsy六月份月赛 .C][树上DP][启发式合并]大根堆
- 3html和css简单介绍
- 4css
- 【正一专栏】国乒球员退赛——体育总局说点人话就这么难吗?
- eclipse maven引入第三方jar包后如何下载源代码(sources)
- iOS编程学习二
- C++学习笔记,字符串输入
- Linux C Socket编程原理及简单实例
- 九度oj-1075-斐波那契数列