LomsatGelral

Lomsat gelral

我们首先考虑暴力合并。

暴力就是每次对于一个点 \(x\),暴力地对其子树再做一遍深度优先遍历求解,然后算上自己的答案。这样做的复杂度是 \(O(n^2)\)

考虑如果将每个点对应的子树的答案存储下来是不可能的,但是每次最后更改计数数组都可以有一棵子树可以保留下来。

我们使用启发式合并,保留子树大小最大的子树。这样每次合并都只清空轻儿子,保留重儿子的信息。

我们考虑证明一下复杂度,每个点反复清空,当且仅当它经过了轻边,此时由于轻边连接的不是重儿子,所以子树大小至少翻倍,那么至多合并 \(\log n\) 次。(证明与树链剖分类似)

复杂度 \(O(n\log n)\)

code

posted @ 2023-08-04 15:05  wscqwq  阅读(16)  评论(0)    收藏  举报