求LCA写法正确性(玄关)
  • 板块学术版
  • 楼主rpyluogu
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/20 19:14
  • 上次更新2024/12/20 20:10:16
查看原帖
求LCA写法正确性(玄关)
1049376
rpyluogu楼主2024/12/20 19:14

看到一个神奇的LCA写法

void pre(int u, int fa) {
    d[u] = d[fa] + 1, ff[u][0] = fa;
    for (int i = 1; i <= lg[d[u]] + 1; ++i) ff[u][i] = ff[ff[u][i - 1]][i - 1];
    for (int v: e[u]) if (v != fa) pre(v, u);
}
 
int lca(int x, int y) {
    if (d[x] < d[y]) swap(x, y);
    while (d[x] > d[y]) x = ff[x][lg[d[x] - d[y]] - 1];
    if (x == y) return x;
    for (int k = lg[d[x]] + 1; k >= 0; --k) if (ff[x][k] != ff[y][k]) x = ff[x][k], y = ff[y][k];
    return ff[x][0];
}
蒟蒻测过不对,但有没有大佬可以指出哪里不对
2024/12/20 19:14
加载中...