重链剖分 学习记录

算法讲解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);
相关推荐
PPPPPaPeR.3 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
看我干嘛!7 分钟前
python第五次作业
算法
历程里程碑12 分钟前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Sheep Shaun14 分钟前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制
Pluchon15 分钟前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法
生锈的键盘24 分钟前
推荐算法实践:交叉特征的理解
算法
试着28 分钟前
【huawei】机考整理
学习·华为·面试·机试
風清掦28 分钟前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
Purple Coder29 分钟前
基于CNN对YBCO超导块材孔隙研究
学习
小龙报30 分钟前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机