重链剖分 学习记录

算法讲解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);
相关推荐
Vizio<2 小时前
ERT中正问题和逆问题的传统数学推导
学习·数学建模·机器人·触觉传感器
丰锋ff2 小时前
2007 年真题配套词汇单词笔记(考研真相)
笔记·学习·考研
musenh3 小时前
mysql学习---事务
学习·mysql
头发掉光的程序员3 小时前
第九章 纹理贴图
c++·图形渲染·direct12
musenh3 小时前
mysql学习--DCL
学习·mysql·adb
ChoSeitaku6 小时前
NO.14数据结构红黑树|树高|转化4阶B树|插入操作|删除操作
数据结构·b树
T1an-16 小时前
力扣70.爬楼梯
算法·leetcode·职场和发展
T1an-16 小时前
力扣169.多数元素
数据结构·算法·leetcode
进击中的小龙7 小时前
在vscode下的cmake项目里传参调试c++命令行程序
c++·vscode