rt,不知道哪里出问题了
#include<bits/stdc++.h>
using namespace std;
const int size=1000010;
int n,m,s;
int ver[size],head[size],nxt[size],tot=0,t;
int fa[size>>1][25],dep[size>>1],lg[size>>1];
inline void add(int x,int y){
ver[++tot]=y,nxt[tot]=head[x],head[x]=tot;
}
void dfs(int x,int f){
dep[x]=dep[f]+1;
fa[x][0]=f;
for(int i=1;i<=t;++i) fa[x][i]=fa[fa[x][i-1]][i-1];
for(int i=head[x];i;i=nxt[i]) if(ver[i]!=f) dfs(ver[i],x);
}
inline int LCA(int x,int y){
if(dep[x]<dep[y]) swap(x,y);
while(dep[x]>dep[y]) x=fa[x][lg[dep[x]-dep[y]]-1];
if(x==y) return x;
for(int k=t;k>=0;--k) if(fa[x][k]!=fa[y][k]) x=fa[x][k],y=fa[y][k];
return fa[x][0];
}
int main(){
ios::sync_with_stdio(0);
cin>>n>>m>>s;
t=log(n)/log(2)+1;
for(int i=1;i<=n-1;++i){
int x,y;
cin>>x>>y;
add(x,y),add(y,x);
}
for(int i=1;i<=n;++i) lg[i]=lg[i-1]+(1<<lg[i-1]==1);
dfs(s,0);
for(int i=1;i<=m;++i){
int x,y;
cin>>x>>y;
cout<<LCA(x,y)<<'\n';
}
return 0;
}