树上启发式合并
启发式
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
Tree Intersection
题目链接:Tree Intersection 考虑树上启发式合并。 每次合并的时候,我们只需要统计子树当中存在并且不为最大值的个数。 一直维护一下就好了。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=1e5+10; int n,c[N],cnt[N],num[N原创 2020-07-24 17:05:06 · 220 阅读 · 0 评论 -
Tree
题目链接:Tree 显然可以启发式合并,然后对于每个点我们要快速找到对应的另一个权值,然后距离小于某个值的个数和。 显然可以线段树维护,所以我们对每一种权值都维护一颗线段树即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=1e5+10,M=N*80; int原创 2020-07-09 09:06:10 · 215 阅读 · 0 评论 -
Russian Dolls on the Christmas Tree
题目链接:Russian Dolls on the Christmas Tree 显然可以dfs序转区间之后上莫队,不过感觉会被卡。 其实也可以dfs序之后,对询问区间排序,然后线段树。 我懒得dfs序,直接树上启发式合并做了。 显然节点儿子信息是可以继承的,所以继承重儿子,暴力轻儿子即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-l...原创 2020-04-23 15:59:54 · 421 阅读 · 0 评论 -
旗鼓相当的对手
题目链接:旗鼓相当的对手 显然,我们可以类似树形dp,对于一个点统计答案的时候,分别从不同子树当中加入。 但是,k很大,所以我们可以启发式合并计算答案。 然后当前计算答案的时候,防止是同一子树互相影响,应该计算答案之后再把这个子树的放进去。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/st...原创 2020-03-27 21:47:09 · 1223 阅读 · 0 评论 -
HDU - 4358
题目链接:HDU - 4358 直接维护当前出现次数为k的个数,存重儿子答案,暴力计算轻儿子即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long using namespace std; const int N=1e5...原创 2020-03-27 13:46:10 · 323 阅读 · 0 评论 -
Codeforces - Soteros
题目链接:Codeforces - Soteros 这道题显然是可以用Dsu on tree去维护,而且有两种写法。 第一种:因为我们不能对每一个点都开一个并查集数组。内存太大。不过,我们可以注意到,对于每一个并查集数组,用到的下标并不多,所以我们可以用map来优化空间。比较好写,而且也好理解。 第二种:就是比较常规的Dsu on tree防止爆空间的思路,通过先递归轻儿子的子树统计答案,然后删...原创 2020-03-05 17:48:07 · 154 阅读 · 0 评论 -
阔力梯的树
题目链接:阔力梯的树 每次插入一个点的贡献值是很好算的,用set维护,找到前驱后继即可。 但是我们每次都把当前的点子树,所有点都插入吗?必然会TLE,我们可以利用 Dsu on tree的思想,每次继承重儿子,暴力更新轻儿子。 然后就ok了。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/st...原创 2020-01-23 21:55:23 · 258 阅读 · 0 评论 -
codeforces - 600E Lomsat gelral
题目链接:Lomsat gelral 题目大意:就是求任意一个子树的出现最多的颜色的值,如果出现次数一样则累加。 然后就是一道树上启发式合并的裸题啦! 我们每次用重链维护信息,往上传递,其他信息暴力更新即可。 AC代码: #pragma GCC optimize(2) #include<bits/stdc++.h> #define int long long using name...原创 2019-09-12 10:22:17 · 222 阅读 · 0 评论