dsu on tree
树上启发式合并
大概步骤
- 求出重儿子
- 先递归处理轻儿子,不保留影响,最后处理重儿子,并保留影响
- 统计当前节点答案时,只处理轻儿子
CF600E Lomsat gelral
题意:求出每个点的子树内出现次数最多的颜色的编号和
很板的一题,求完重儿子后直接,递归处理轻儿子,把颜色出现次数给清空,防止互相影响
随后再处理递归重儿子,不清空颜色出现次数,因为在后面计算当前节点的答案时不必再次
遍历一遍重儿子的子树,可以把时间复杂度从\(O(n^2)\)->\(O(nlogn)\)
CF570D Tree Requests
题意:给定一个棵树,每次询问a,b,要求a的子树中深度为b的结点上的字母重新排列之后是否能构成回文串。
很轻易的可以想到由于你可以随便排列字母,所以想要组成回文串肯定是形如aaabaaa或aaaaaa的字符串
即要求数量为奇数的字母小于<=1
设cnt[d][c] 为深度为d时字母c出现的次数,最后直接check即可
由于这个深度在每个询问中被限制在了子树内,所以我们要变递归边去加这个cnt,
这时候就可以使用dsu on tree快速地处理

浙公网安备 33010602011771号