求各位dalao帮我看一下错在哪儿
样例能过,交上去全是WA
#include<cstdio>
#include<vector>
#include<cstring>
#define MAXN 500005
#define MAXLOGN 20
using namespace std;
vector<int>s[MAXN];
int dp[MAXN][MAXLOGN],h[MAXN];
void dfs(int n) {
for(int i=0; i<s[n].size(); i++) {
h[s[n][i]]=h[n]+1;
dfs(s[n][i]);
}
}
inline void jump(int &x,int d) {
for(int i=0; d; i++) {
if(d&1)x=dp[x][i];
d>>=1;
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
memset(dp,-1,sizeof(dp));
int N,M,S;
scanf("%d %d %d",&N,&M,&S);
for(int i=0; i<N-1; i++) {
int x,y;
scanf("%d %d",&x,&y);
s[y].push_back(x);
dp[x][0]=y;
}
dfs(S);
for(int i=1; i<MAXLOGN; i++)for(int j=1; j<=N; j++)if(dp[j][i-1]>-1)dp[j][i]=dp[dp[j][i-1]][i-1];
for(int i=0; i<M; i++) {
int a,b;
scanf("%d %d",&a,&b);
if(h[a]>h[b])jump(a,h[a]-h[b]);
else jump(b,h[b]-h[a]);
if(a==b)printf("%d\n",a);
else {
for(int j=MAXLOGN-1; j>-1; j--)if(dp[a][j]!=dp[b][j]) {
a=dp[a][j];
b=dp[b][j];
}
printf("%d\n",dp[a][0]);
}
}
return 0;
}