#include <bits/stdc++.h>
using namespace std;
int n,m,s,x,y,idx=1,head[500010],dpt[500010],fa[500010][19];
struct node{
int to,next;
}edges[500010*2];
void add(int x,int y){
edges[idx].to=y;
edges[idx].next=head[x];
head[x]=idx++;
}
int dfs(int s,int f){
for(int i=head[s];i;i=edges[i].next){
int t=edges[i].to;
if(t==f)continue;
dpt[t]=dpt[s]+1;
fa[t][0]=s;
for(int i=1;i<=log2(dpt[t]);i++){
fa[t][i]=fa[fa[t][i-1]][i-1];
}
dfs(t,s);
}
}
int find(int x,int y){
if(dpt[x]<dpt[y])swap(x,y);
while(dpt[x]>dpt[y]){
int p=log2(dpt[x]-dpt[y]);
x=fa[x][p];
}
if(x==y)return x;
for(int i=log2(dpt[x]);i>=0;i--){
if(fa[x][i]!=fa[y][i]){
x=fa[x][i],y=fa[y][i];
}
}
return fa[x][0];
}
int main(){
cin >> n >> m >> s;
for(int i=0;i<n-1;i++){
cin >> x >> y;
add(x,y);
add(y,x);
}
dpt[s]=0;fa[s][0]=-1;
dfs(s,-1);
while(m--){
cin >> x >> y;
cout << find(x,y) << endl;
}
return 0;
}
就是说P3379这道题(最近公共祖先)过不了,原因竟是dfs是int类型,求大神解释一下为什么