#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n;
vector<int>v[N];
int dep[N],f[N][20];
void bfs(int x){
memset(dep,0x3f,sizeof dep);
dep[0]=0;
dep[x]=1;
queue<int>q;
q.push(x);
while(!q.empty()){
int t=q.front();
q.pop();
for(auto j:v[t]){
if(dep[j]>dep[t]+1){
dep[j]=dep[t]+1;
q.push(j);
f[j][0]=t;
for(int k=1;k<=19;k++){
f[j][k]=f[f[j][k-1]][k-1];
}
}
}
}
}
int lca(int a,int b){
if(dep[a]<dep[b])swap(a,b);
for(int k=19;k>=0;k--){
if(dep[f[a][k]]>=dep[b]){
a=f[a][k];
}
}
if(a==b)return a;
for(int k=19;k>=0;k--){
if(f[a][k]!=f[b][k]){
a=f[a][k];
b=f[b][k];
}
}
return f[a][0];
}
int m,root;
int main(){
cin>>n>>m>>root;
for(int i=1;i<n;i++){
int a,b;
cin>>a>>b;
//if(b==-1)root=a;
v[a].push_back(b);
v[b].push_back(a);
}
bfs(root);
// cin>>m;
while(m--){
int a,b;
cin>>a>>b;
cout<<lca(a,b)<<endl;
}
return 0;
}
05-20
05-09
385
01-29
130
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交