rt,自测过,deep数组没问题,但是x总是输出0,求大佬调一下 code:
#include<bits/stdc++.h>
using namespace std;
int n,q,root,k;
int st[500030][20],deep[500030];
vector<int> v[500030];
void count_deep(int x,int father){
deep[x]=deep[father]+1;
st[x][0]=father;
for(int i=1;(1<<i)<=deep[father];i++){
st[x][i]=st[st[x][i-1]][i-1];
}
for(int i=0;i<v[x].size();i++){
count_deep(v[x][i],x);
}
}
int lca(int a,int b){
int x=deep[a],y=deep[b];
if(x!=y){
if(x<y){
swap(a,b);
swap(deep[a],deep[b]);
}
for(int i=0;i<=k;i++){
if((1<<i)!=(a-b)){
a=st[a][i];
}
}
}
if(a==b) return a;
for(int i=k;i>=0;i--){
if(deep[st[a][i]]==0) continue;
if(st[a][i]==st[b][i]) continue;
a=st[a][i],b=st[b][i];
}
return st[a][0];
}
int main(){
cin>>n>>q>>root;
k=log(n)/log(2)+0.5;
for(int i=1;i<n;i++){
int a,b;
cin>>a>>b;
v[b].push_back(a);
}
count_deep(root,0);
while(q--){
int a,b;
cin>>a>>b;
int x=lca(a,b);
cout<<x<<endl;
}
}