Dsu on Tree
一场比赛有两道,好tm巧啊
Problem 1
这种方法其实就是通过性质优化的暴力。遍历时轻边优先。
首先肯定是拆位了,然后可以用trie维护一下某颗子树内的点的串,很容易统计答案。 (具体要看题解了)
但是暴力加/删点会T,就要用dot了。
发现计算完一个儿子的答案之后,整颗子树都被添加到了trie中。但如果要继续做其他儿子所以要清空trie.
有一颗子树是可以不用清空,用于统计当前点的答案的。 当然是重儿子最好了。于是我们把重儿子放到最后遍历就可以了。
分析一下时间复杂度,计算答案时,每一个点被加入trie的次数就是他到根所在的轻边条数。
又因为点到根的路径上轻边条数是log条,所以时间是n log n.
(每一条轻边意味着当前子树大小至少为轻边所在儿子大小a+重边大小(>a) >=2a)
Exercise
2137