长链剖分

长链剖分学习笔记。

简介

长链剖分,顾名思义,就是每条链都很长嘛!

跟树链剖分名字比较像,那他们有什么不同呢?

树链剖分重儿子靠子树大小。

那长链剖分靠啥呢?当然是靠最深的点谁更深啦。

那么求出 $len_u$ 表示最深的点到 $u$ 的距离就可以啦~

好了,我们已经会对一棵树进行长链剖分了。

长链剖分有点类似于 dsu on tree,解决的是一些跟树上启发式合并相关的题。

长链剖分需要题目满足一些跟深度有关的性质。比如树形dp合并时dp数组的下标只需要用到 $len_v$ 个之类的。

这个东西这样讲感觉比较难懂。具体看例题吧。

性质

性质1

任何节点的 $k$ 级祖先所在长链长度大于 $k$ 。

证明十分显然。

性质2

任何节点往上跳经过的长链条数最多为 $O(\sqrt{n})$ 条。

证明:每次跳长链长最多 $+1$,最坏情况为一直 $+1$。因此最多跳 $O(\sqrt{n})$ 条。

例题

dp题一般是先长链剖分,然后指针实现。

  1. Dominant Indices[CF1009F]
  2. Hotel[POI2014]
  3. Salty Fish[hdu6634]