倍增LCA
int lca(int u, int v) {
if(dep[u] > dep[v]) swap(u, v);
for(int i = 20; i >= 0; i--) {
if(dep[fa[v][i]] >= dep[u]) {
v = fa[v][i];
}
}
if(u == v) return u;
for(int i = 20; i >= 0; i--) {
if(fa[u][i] == fa[v][i]) continue;
u = fa[u][i];
v = fa[v][i];
}
return fa[u][0];
}

浙公网安备 33010602011771号