长链剖分

posted on 2025-04-19 02:41:27 | under | source

糖丸了。

算法

\(wson_x\)\(x\) 子树内深度最深的节点所在的儿子子树。

这样的剖分叫长剖。

性质

  • \(x\)\(k\) 级祖先所在的长链长度 \(\ge k\)。显然。
  • \(x\) 到根的路径上有 \(O(\sqrt n)\) 条长链。

应用

\(k\) 级祖先

由性质,令 \(2r\ge k\),那么先跳到 \(r\) 级祖先 \(y\)。记 \(y\) 的链顶为 \(z\),假如跳 \(k-r\) 步不到 \(z\),预处理长链节点即可回答。否则相当于从 \(z\)\(\le r\) 步,也是可以预处理。

\(r\)\(k\) 的最大二进制位即可。瓶颈在于倍增预处理 \(O(n\log n)\)\(O(1)\) 回答。

优化树上与深度有关的 dp

思想就是继承重儿子,暴力转移轻儿子。显然 \(O(n)\)

posted @ 2026-01-15 08:24  Zwi  阅读(3)  评论(0)    收藏  举报