int p[maxn][20]
int LCA(int x, int y) {
if (dep[x] > dep[y]) swap(x, y);
for (int i = 20; i >= 0; i--) {
if (dep[y] - (1 << i) >= dep[x])
y = p[y][i];
}
if (x == y) return x;
for (int i = 20; i >= 0; i--) {
if (p[x][i] == p[y][i]) continue;
x = p[x][i], y = p[y][i];
}
return p[x][0];
}
void dfs1(int x, int pre, int d)
{
dep[x] = d;
fa[x] = pre;
p[x][0] = pre;
for (int i = 1; (1 << i) <= dep[x]; i++)
p[x][i] = p[p[x][i - 1]][i - 1];
for(int i=head[x]; i!=-1;i = e[i].next)
{
if(e[i].v == pre)
continue;
dfs1(e[i].v, x, d+1);
}
}
04-14
04-29
04-29
04-29
04-29
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交