#include<bits/stdc++.h>
#define N 0x7ffff
using namespace std;
inline int read()
{
register int x=0;
bool f=1;
register char c=getchar();
while(c<48||c>57){
if(c=='-') f=0;
c=getchar();
}
while(c>=48&&c<=57){
x=x*10+(c^48);
c=getchar();
}
return f?x:-x;
}
int n,m,s,x,y,f[N][25];
int dum[N],nex[N],first[N],go[N],num;
int add(int u,int v){
nex[num++]=first[u];
first[n]=num;
go[num]=v;
}
void dfs(int u,int fa){
dum[u]=dum[fa]+1;
for(int i=0;i<=19;i++)
f[u][i+1]=f[f[u][i]][i];
for(int i=first[u],v;v=go[i],i;i=nex[i]){
if(v==fa)continue;
f[v][0]=u;
dfs(v,u);
}
}
int lca(int x,int y){
if(dum[x]<dum[y])swap(x,y);
for(int i=20;i>=0;i--){
if(dum[f[x][i]]>=dum[y])
x=f[x][i];
}
if(x==y)return x;
for(int i=20;i>=0;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i];
y=f[y][i];
}
}
return f[x][0];
}
int main(){
n=read();
m=read();
s=read();
for(int i=1;i<n;i++){
x=read();y=read();
add(x,y);add(y,x);
}
dfs(s,0);
for(int i=1;i<=m;i++){
x=read();y=read();
cout<<lca(x,y)<<endl;
}
return 0;
}
我也不知道为什么全TLE了,求大佬