LCA 和 RMQ 互化
简单记录一下。
RMQ 转 LCA:建立笛卡尔树即可。
为啥:考虑树上的点 \(lca(u,v)\),其必为 \([u,v]\) 中的点。对于所有以其为根的子树中的点,一定比其权值小/大,不在子树中的点,不在 \([u,v]\) 中。
LCA 转 RMQ:
-
欧拉序:对树求出欧拉环游序,LCA 必为两点第一次出现的位置间深度最小的点。
为啥:考虑如何找 LCA:首先在 \(u\) 子树中找 \(v\),再在 \(fa_u\) 的子树中找 \(v\),以此类推,LCA为找到 \(v\) 时经过的最小深度的点。而 DFS 就是这一过程的一般化。 -
DFS 序:该方法从常数和代码复杂度上都优于欧拉序。LCA 为 \([dfn_ u+1,dfn_ v]\) 中深度最小点的父亲。注意特判 \(u=v\)。