int lca(int x,int y)
{
if(de[x]<de[y]) swap(x,y);
int d=de[x]-de[y];
for(int i=log2(d);i>=0;i--)
{
if(d&(l<<i))
{
x=fa[x][i];
}
}
for(int i=log2(n);i>=0;i--)
{
if(fa[x][i]!=fa[y][i])
{
x=fa[x][i];
y=fa[y][i];
}
}
if(x!=y)
{
return fa[x][0];
}
else
{
return x;
}
}
来源:oschina
链接:https://my.oschina.net/u/4261790/blog/4313220