int lca(int x,int y){
int j;
if (d[x]<d[y]) swap(x,y);
if (d[x]!=d[y]){
j=floor(log(d[x]-d[y])/log(2));
while (j>=0){
if (d[f[x][j]]>d[y]) x=f[x][j];
j--;
}
x=f[x][0];
}
if (x==y) return x;
j=floor(log(d[x])/log(2));
while (j>=0){
if (f[x][j]!=f[y][j]){
x=f[x][j];
y=f[y][j];
}
j--;
}
return f[x][0];
}
LCA模板
最新推荐文章于 2024-07-20 15:57:21 发布