树链剖分

Posted lianq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树链剖分相关的知识,希望对你有一定的参考价值。

树链剖分

前言:虽然noip基本不考,但我觉得还是多少学一点吧


问题模型

对于树上的某条路径,进行一系列操作(类似线段树上的操作)


实现原理

恰如其名,将树剖分成一段又一段的区间(树链),便于我们进行线段树的操作(树上的线段树操作)。将树分为重链和轻链,重链的dfs序(与其他dfs序不同,树剖的dfs序会优先落在重链上)多为一段连续的区间。因此当解决两点间路径上的查询和修改问题时,可以用类似于LCA(其实区别较大,LCA是通过倍增来跳,而树剖是通过重链来跳)的方法,将两点之间的路径剖分成多条首尾相连的树链,每条树链上的点所在区间是连续的,进而进行线段树的操作。


例题

[Noi2015]软件包管理器

解析:虽然是NOI的题,但却是一道Day1 T2的除了题意比较冗长外的极水的树链剖分裸题。安装软件包就是将根节点到x节点的路径上所有值变为1,卸载软件包就是将x节点和它所有子树节点的值变为0,而x和它的子树节点在树链剖分中恰好是一段连续的区间[seg[x],seg[x]+size[x]-1],然后直接树链剖分做就可以了。

以上是关于树链剖分的主要内容,如果未能解决你的问题,请参考以下文章

树链剖分模板

树链剖分

树链剖分 入门

树链剖分

树链剖分(轻/重链剖分学习笔记)

树链剖分详解