重链剖分 学习记录

算法讲解161【挺难】树链剖分-上_哔哩哔哩_bilibili

重链剖分可以让树使用一个线性结构维护, 维护dfn序等信息

对于一个节点u的子树: 他的dfn序范围就是

对于每个重链上的点 都维护一个top信息 为这个重链的最顶端的节点

对于u, v路径上的节点, 比一下u, v节点top节点dfn序的大小, dfn序大的那个节点往上跳, 并更新/统计这个路径上的信息 一共最多跳log(n)次

核心代码:

cpp 复制代码
while(top[x] != top[y]) {
	if (dfn[top[x]] > dfn[top[y]]) {
		swap(x, y);
	}
	seg.rangeUpdate(dfn[top[y]], dfn[y], tag);
	y = fa[top[y]];
}
if (dfn[x] > dfn[y]) swap(x, y);
seg.rangeUpdate(dfn[x], dfn[y], tag);
相关推荐
数模竞赛Paid answer26 分钟前
2026年中青杯数学建模A题数学建模论文智能评估系统与多智能体优化方法求解全过程论文及程序
算法·数学建模·中青杯
银-豆豆44 分钟前
数据结构与算法-动态规划、回溯与贪心
算法·动态规划
Lzg_na1 小时前
constexpr的优势
c++
想吃火锅10052 小时前
【leetcode】200. 岛屿数量
算法·leetcode·职场和发展
王维同学2 小时前
进程模块枚举、映像身份与线程启动地址关联
c++·windows·安全
hold?fish:palm3 小时前
24 回文链表
数据结构·c++·链表
举手3 小时前
Dispatcher模块剖析
linux·c++
何事误红尘3 小时前
全志A40i学习笔记():开发资料、启用串口
学习
Nil2083 小时前
leetcode 54螺旋矩阵
算法·leetcode·矩阵
for_ever_love__3 小时前
python基础语法学习: 异常的传递性
开发语言·python·学习