基本知识

树链剖分是一种可以将树上问题转化为序列问题的思想,将树分割为若干条链,以维护树上的路径信息。

树链剖分有多种形式,例如重链剖分长链剖分实链剖分。本文主要介绍重链剖分

基本定义

重子节点

预备数组

fa[u],存储 u 的父亲节点。

dep[u],存储 u 在树中的深度。规定根节点的深度为 1

siz[u],存储以 u 为根的子树大小,包含 u 这个节点。

son[u],存储 u 的重儿子,即 u 的所有儿子 vsizev 最大的一个儿子。

top[u],存储 u 节点所在的重链中深度最浅的节点(即重链的顶端)。

dfn[u],存储 u 节点在 DFS 序中的位置。

rnk[u],存储 DFS 序中的第 i 个位置对应在树上的编号。有 rnkdfnu = u

两遍 DFS

例题讲解

树链剖分 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

【模板】重链剖分/树链剖分

模板题。

【模板】最近公共祖先(LCA)

【TJOI2015】 旅游