树链剖分中的一些性质与证明

一.重链剖分

1.树上每条路径最多可以拆分成不超过\(O(log_{2}n)\)条重链

证明:从一个节点若走到一个轻儿子上,那么轻儿子的子树大小最少是父亲子树大小的一半(否则此儿子不会是轻儿子),这样最多只会走\(O(log_2n)\)就到叶子节点了

二.长链剖分

1.一个节点的\(k\)级祖先所在长链长度一定不小于 \(k\)

证明:设\(u\)\(k\)级祖先为\(v\)\(v\)的重儿子为\(a\),则若\(v\)所在长链长度小于 \(k\),则\(a\)就不会是\(v\)的重儿子,而是\(u\)所在方向的儿子,与事实不符。

2.一个节点所在长链一定是该子树中最长的长链

证明:若此节点所在长链不是该子树中最长的长链,则该长链最低点深度一定小于该子树中最长的长链最低点深度,不符合重儿子的定义。

3.从根节点到任意叶子节点经过的轻边条数不超过\(\sqrt{n}\)

证明:根据性质二,若一直走轻儿子,设走了\(k\)次轻儿子,则最坏情况下节点个数依次减少\(k,k-1,...,1\),则\(\frac{(k+1)*k}{2} =n\),所以\(k=O(\sqrt{n})\)

4.长链剖分优化dp

当dp状态有一维与深度有关,则可以使用长链剖分dp,当前节点继承重儿子的dp状态,轻儿子的dp状态暴力合并。

证明:每个节点 深度那一维 最多调用 其子树深度最大值 个位置,所以每个节点合并的时间一定小于 该节点所在的长链长度,

      所以 时间复杂度=轻儿子个数*每个轻儿子所在长链长度=所有长链长度之和=O(n)
posted on 2025-09-18 16:11  jisuheng123  阅读(30)  评论(0)    收藏  举报