加载中...
树链剖分是一种把静态树上的路径拆解为若干连续区间的技术,通过区分重边与轻边,把任意两点间路径切成对数条重链,再配合线段树等结构,实现对树上路径的高效区间修改与查询。

| 别名 | HLD、重链剖分 |
| 适用对象 | 静态树 |
| 路径链数 | O(log n) |
| 常配结构 | 线段树、树状数组 |
| 主要领域 | 算法竞赛 |
树链剖分是一种把树上路径问题转化为序列区间问题的经典技术。它按子树大小把每个节点的一条边标为重边,其余为轻边,使得任意根到叶的路径最多跨越对数条轻边,从而把两点间路径拆成对数条连续的重链区间。
树链剖分中最常用的是重链剖分。它先通过一次遍历求出每个节点的子树大小,再让每个节点指向子树最大的孩子作为重儿子,由重边串起的极长路径即重链。对整棵树做深度优先遍历时优先走重儿子,可让每条重链对应一段连续的编号区间。
树链剖分广泛用于处理静态树上的路径修改与查询,如路径求和、路径最值、路径染色,以及子树整体操作。它是算法竞赛中的常用技术,也用于处理层级结构上的批量统计问题。求最近公共祖先也是它的一个自然副产品。
问:树链剖分能处理树形态变化吗?答:标准的重链剖分针对静态树,若树需要频繁连边断边,应改用链剖树等动态树结构。
问:为什么路径最多只有对数条重链?答:因为每经过一条轻边,子树大小至少减半,而路径上轻边数量因此被对数所限,重链段数也随之为对数级。

| 别名 | HLD、重链剖分 |
| 适用对象 | 静态树 |
| 路径链数 | O(log n) |
| 常配结构 | 线段树、树状数组 |
| 主要领域 | 算法竞赛 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧