§06 图结构
LCA 最近公共祖先
倍增上跳:深的先追平、两点同步试跳——树上差分与距离计算的基础。
LCA 最近公共祖先
伪代码
1
procedure LCA(u, v)
2
预处理: depth[u] 与 up[u][k] = 2^k 级祖先
3
if depth[u] < depth[v]: 交换 u, v // 让 u 更深
4
diff = depth[u] - depth[v]
5
for k = 0..LOG-1: if diff 第 k 位为 1: u = up[u][k]
6
if u == v: return u
7
for k = LOG-1..0:
8
if up[u][k] != up[v][k]: u=up[u][k]; v=up[v][k]
9
return up[u][0] // 父节点即 LCA