#include <bits/stdc++.h>
using namespace std;
vector<int> e[500005];
int n,m,u,v,root,fa[500005];
void dfs(int now,int lst){
fa[now]=lst;
for(int i=0;i<e[now].size();i++){
int nxt=e[now][i];
if(nxt!=lst)dfs(nxt,now);
}
}
int lca(int root){
dfs(root,-1);
bool flag[500005];
for(int i=1;i<=n;i++)flag[i]=false;
while(u!=-1){
flag[u]=true;
u=fa[u];
}
while(flag[v]!=true)v=fa[v];
return v;
}
int main(){
cin >>n >>m >>root;
for(int i=1;i<n;i++){
int u,v;
cin >>u >>v;
e[u].push_back(v);
e[v].push_back(u);
}
while(m--){
cin >>u >>v;
cout <<lca(root) <<"\n";
}
return 0;
}
怎么优化?