LCA
板子献上
#include
#include
using namespace std;
struct yyy{
int t,
nex;
}e[2*500001];
int depth[500001],fa[500001][22],lg[500001],head[500001];
int tot;
void add(int x,int y){
e[++tot].t=y;
e[tot].nex=head[x];
head[x]=tot;
}
void dfs(int f,int fath)
{
depth[f]=depth[fath]+1;
fa[f][0]=fath;
for(int i=1;(1<depth[y])
x=fa[x][lg[depth[x]-depth[y]]-1];
if(x==y)
return x;
for(int k=lg[depth[x]]-1;k>=0;k--)
if(fa[x][k]!=fa[y][k])
x=fa[x][k], y=fa[y][k];
return fa[x][0];
}
int n,m,s;
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n-1;i++)
{
int x,y; scanf("%d%d",&x,&y);
add(x,y); add(y,x);
}
dfs(s,0);
for(int i=1;i<=n;i++)
lg[i]=lg[i-1]+(1<
此处评论已关闭