输出:4 0 0 0 4
#include <iostream>
#include <vector>
using namespace std;
const int N=1e5+1;
int n,m,r,p,f,t,x,y,tim,a[N],fa[N],in[N],out[N],dep[N],siz[N],hson[N],belong[N];
vector<int> son[N];
void dfs(int i,int f)
{
fa[i]=f;
siz[i]=1;
dep[i]=dep[f]+1;
for(auto x:son[i])
if(x!=f)
{
dfs(x,i);
siz[i]+=siz[x];
if(siz[hson[i]]<siz[x]) hson[i]=x;
}
}
void dfs2(int i,int op)
{
if(!op) belong[i]=i;
else belong[i]=belong[fa[i]];
in[i]=++tim;
if(hson[i]) dfs2(hson[i],1);
for(auto x:son[i])
if(x!=fa[i]&&x!=hson[i])
dfs2(x,0);
out[i]=++tim;
}
int lca(int x,int y)
{
while(belong[x]!=belong[y])
{
if(dep[x]<dep[y]) swap(x,y);
x=fa[belong[x]];
}
if(dep[x]<dep[y]) return x;
return y;
}
int main()
{
cin>>n>>m>>r/*>>p*/;
// for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++)
{
cin>>f>>t;
son[f].push_back(t);
son[t].push_back(f);
}
dfs(r,0);
dfs2(r,0);
// for(int i=1;i<=n;i++)
// {
// for(auto x:son[i]) cout<<x<<' ';
// cout<<endl;
// }
// cout<<endl;
// cout<<"fa : ";for(int i=1;i<=n;i++)cout<<fa[i]<<' ';cout<<'\n';
// cout<<"siz : ";for(int i=1;i<=n;i++)cout<<siz[i]<<' ';cout<<'\n';
// cout<<"dep : ";for(int i=1;i<=n;i++)cout<<dep[i]<<' ';cout<<'\n';
// cout<<"hson : ";for(int i=1;i<=n;i++)cout<<hson[i]<<' ';cout<<'\n';
// cout<<"belong : ";for(int i=1;i<=n;i++)cout<<belong[i]<<' ';cout<<'\n';
// cout<<"in : ";for(int i=1;i<=n;i++)cout<<in[i]<<' ';cout<<'\n';
// cout<<"out : ";for(int i=1;i<=n;i++)cout<<out[i]<<' ';
while(m--)
{
cin>>x>>y;
cout<<lca(x,y)<<'\n';
}
return 0;
}