树链剖分(轻/重链剖分学习笔记)
前置知识:LCA,树上dp。
前言
个人树链剖分是一个暴力数据结构,也就是它的本质就是暴力,只不过优化了一下而已。
树链剖分一般用于维护树上两点之间或子树中的权值。算是树上问题中较为基础的一个算法。
定义
轻/重链
对于树上的某个节点的所有子树中,如果这个儿子的所在的子树是这些子树中最大的(节点个数最多的),则称这个儿子为重儿子,其余的儿子则为轻儿子。除叶子节点外,所有节点都有恰好有一个重儿子,子树大小相同则取任意一个。
在这个树上连向重儿子的边叫做重边,其余的边叫做轻边。一段连续的重边连成的链叫做重链,下面给出一张图来解释一下:

在这张图中,红色的节点为重儿子,黑色的节点为轻儿子,一段连续和红色的边即为重链。\(3,4,5,6\) 为重儿子,\(2,7,8\) 为轻儿子,\(1\) 为根节点(一般标记为轻儿子)。两个重链分别为 \(2\rightarrow 4\rightarrow 5\) 为一条重链,\(1\rightarrow 3\rightarrow 6\) 为另一条重链。一条重链总是在叶子节点结束(可以自己证明一下)。