重链剖分 学习记录

算法讲解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);
相关推荐
递归不收敛10 小时前
专属虚拟环境:Hugging Face数据集批量下载(无登录+国内加速)完整指南
人工智能·笔记·git·python·学习·pycharm
国服第二切图仔11 小时前
Rust开发之使用Trait对象实现多态
开发语言·算法·rust
电鱼智能的电小鱼12 小时前
基于电鱼 ARM 工控机的井下AI故障诊断方案——让煤矿远程监控更智能、更精准
网络·arm开发·人工智能·算法·边缘计算
玖笙&12 小时前
✨WPF编程进阶【6.1】:图形原则(附源码)
c++·c#·wpf·visual studio
s砚山s12 小时前
代码随想录刷题——二叉树篇(一)
c++·算法·leetcode
小十一再加一12 小时前
【数据结构初阶】单链表
数据结构
GIS开发特训营13 小时前
常见二三维GIS数据分类及处理流程图
学习·流程图·gis·gis开发·webgis
神秘剑客_CN13 小时前
MacOS学习笔记
笔记·学习·macos
林一百二十八13 小时前
在Ubuntu上学习C语言(一)
c语言·学习·ubuntu
AC是你的谎言13 小时前
HTTP和HTTPS
linux·网络·c++·网络协议·学习·http·https