树链剖分中的一些性质与证明
一.重链剖分
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)
浙公网安备 33010602011771号