实在看不出哪里错了
#include <iostream>
#include <cstring>
using namespace std;
int dep[500005];
int fa[500005][22];
struct node{
int to,nxt;
};
int cnt;
node e[500005];
int head[500005];
void add(int u,int v)
{
e[cnt++].to = v;
e[cnt].nxt = head[u];
head[u] = cnt;
}
const int k = 20;
int n,m,s;
void dfs(int u,int father)
{
dep[u] = dep[father] + 1;
fa[u][0] = father;
for(int i=1;i<=k;i++)
{
fa[u][i] = fa[fa[u][i-1]][i-1];
}
for(int i=head[u];~i;i=e[i].nxt)
{
int v = e[i].to;
if(v!=father)
{
dfs(v,u);
}
}
}
int LCA(int u,int v)
{
if(dep[u]<dep[v])
swap(u,v);
for(int i = k;i>=0;i--)
{
if(dep[v]<=dep[fa[u][i]])
u = fa[u][i];
}
if(u==v)
{
return v;
}
for(int i=k;i>=0;i--)
{
if(fa[u][i]!=fa[v][i])
{
u = fa[u][i];
v = fa[v][i];
}
}
return fa[u][0];
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m>>s;
memset(head,-1,sizeof(head));
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
add(u,v);
add(v,u);
}
dfs(s,0);
for(int i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;
cout<<LCA(a,b)<<endl;
}
return 0;
}