#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define F(i, x, y) for (rint i = (x); i <= (y); i++)
#define DF(i, x, y) for (rint i = (x); i >= (y); i--)
#define LL unsigned long long
#define PII pair<int,int>
#define x first
#define y second
const int N = 5e5+10,inf = 0x3f3f3f3f;
int n,m,s;
int dep[N],f[N][20];
vector<int> G[N];
int rd()
{
int x = 0; int f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = - 1;
for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x *= f;
}
void pt(int x)
{
if(x < 0)putchar('-'),x = -x;
if(x <= 9)putchar(x + '0');
else
{
pt(x / 10);
putchar(x % 10 + '0');
}
}
void dfs(int u,int fa)
{
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if(v==fa)continue;
dep[v] = dep[u]+1;
f[v][0] = u;
dfs(v,u);
}
}
int LCA(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
for(int i=18;i>=0;i--)
if(dep[f[x][i]]>=dep[y])
x=f[x][i];
if(x==y)return x;
for(int i=18;i>=0;i--)
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][0];
}
signed main()
{
cin>>n>>m>>s;
F(i,1,n-1)
{
int u,v;
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
dep[s] = 1; //为何此处深度改为0就WA???
dfs(s,-1);
for(int k=1;k<=18;k++)
for(int i=1;i<=n;i++)
f[i][k] = f[f[i][k-1]][k-1];
while(m--)
{
int a,b;cin>>a>>b;
if(a==b){
pt(a);puts("");
}
else {
pt(LCA(a,b));puts("");
}
}
return 0;
}
如上,写成dep[s]=0
就WA了,不太理解