#include<bits/stdc++.h>
#define uns unsigned
using namespace std;
const uns N=5e5+5;
uns a,b,c,d,e,yu=0,cnt=0,cntt;
struct zhi{
uns de;
uns yz;
}l[N];
uns lg[N];
uns node[N];
unsigned de[N];
uns zx[N][25];
struct lian{
uns dn,nxt;
}n[N*2];
int y[N];
int x[N];
uns fa[N];
bool cmp(zhi a,zhi b){
return a.de<b.de;
}
void chest(uns a,uns b){
if(y[a]!=0){
n[x[a]].nxt=++cntt;
n[cntt].dn=b;
x[a]=cntt;
}
else{
y[a]=++cntt;
n[cntt].dn=b;
x[a]=cntt;
}
return;
}
void chey(uns now,uns last){
fa[now]=last;
uns t;
de[now]=de[last]+1;
for(uns t=y[now],i=1;i<=node[now];t=n[t].nxt,i++){
if(n[t].dn!=last){
chey(n[t].dn,now);
}
}
return ;
}
int main(){
cin>>a>>b>>c;
fa[c]=c;
for(uns i=1;i<=a-1;i++){
cin>>d>>e;
chest(d,e);
chest(e,d);
node[d]++;
node[e]++;
}
chey(c,c);
for(int i=2;i<=a;i++){
lg[i]=lg[i>>1]+1;
}
for(uns i=1;i<=a;i++){
l[i].yz=i;
zx[i][0]=fa[i];
}
sort(l,l+a+1,cmp);
for(int i=1;i<=a;i++){
for(uns j=1;j<=lg[de[l[i].yz]];j++){
zx[l[i].yz][j]=zx[zx[l[i].yz][j-1]][j-1];
}
}
for(int i=1;i<=b;i++){
cin>>d>>e;
if(de[e]<de[d]){
swap(e,d);
}
while(de[e]!=de[d]){
e=zx[e][lg[de[e]-de[d]]];
}
if(e==d){
printf("%d\n",e);
}
else{
for(uns j=lg[de[e]];j>=0&&j<4e9;j--){
if(zx[e][j]!=zx[d][j]){
e=zx[e][j];
d=zx[d][j];
}
}
printf("%d\n",fa[e]);
}
}
}
前两个点AC,后面全部RE现在只求告诉我为什么chey函数会崩溃然后返回3221225725