rt
#include<bits/stdc++.h>
using namespace std;
#define usz 114514*5
int n,m,s,fa[usz],d[usz],f[usz][20];
void dfs(int now,int last,int deep){
d[now]=deep;
f[now][0]=last;
for(int i=1;i<=n;i++){
if(fa[i]==now){
dfs(i,now,deep+1);
}
}
return;
}
int lca(int x,int y){
if(d[x]<d[y]){
swap(x,y);
}
for(int i=19;i>=0;i--){
if(d[f[x][i]]>=d[y]){
x=f[x][i];
}
}
if(x==y) return x;
for(int i=19;i>=0;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i];
y=f[y][i];
}
}
return f[x][0];
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
fa[x]=y;
}
dfs(s,s,0);
for(int j=1;j<=19;j++){
for(int i=1;i<=n;i++){
f[i][j]=f[f[i][j-1]][j-1];
}
}
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
cout<<lca(a,b)<<'\n';
}
}
样例过了,提交后还TLE了一个点