树链剖分
树链剖分
基本架构
原理:将树以一种划分方式分成若干条链,转换为区间,再用数据结构维护
一般形式:两遍dfs初始化+数据结构(线段树/树状数组)
解决的问题:各种树上区间操作(维护的东西越多,解决问题的范围就越大)
两遍dfs维护的:
$fa$[ ](父节点)
$son$[ ](重儿子)
$dep$[ ](深度)
$siz$[ ](子树大小)
$seg$[ ](树中点在数据结构(如线段树)中编号)
$rev$[ ](数据结构中点在树中编号)
$top$[ ](重链头)
轻重边的一些性质:
1.如果(u, v)为轻边,则size[v] <= size[u] / 2。
2.从根到某一点v的路径上,轻边个数不多于O(logn)。
3.称某条路径为重路径(重链),当且仅当它全部由重边组成,一个点也算一条重路径。那么对于每个点到根的路径上都有不超过O(logn)条轻边和O(logn)条重路径。
4.每个点都在且仅在一条重路径上,每条路径一定是一条从根结点方向向叶结点延申的深度递增的路径。
维护完后即可使用线段树等进行区间维护,单次区间修改或查询复杂度为\(O(\log^2n)\)
边权化点权
简单画几个图,模一模可发现若将边权化至深度大(靠下)的点,即可保证一条边对应一个点,可进行边权化点权。修改或查询时,减去\(lca(x, y)\)处即可。

浙公网安备 33010602011771号