求助,#11 WA 。
#include<bits/stdc++.h>
using namespace std;
#define N 1000001
vector < pair <int , int > > e[N];
int tot,h[N],to[N],nt[N];
int n,fa[N];
void add(int u,int v)
{
nt[++tot]=h[u];
h[u]=tot;
to[tot]=v;
}
void add_e(int x,int y,int i)
{
e[x].push_back(make_pair(y,i));
e[y].push_back(make_pair(x,i));
}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int d[N],v[N],len[N],lca[N];
void Tarjan(int x,int p)
{
d[x]=d[p]+1;
v[x]=1;
for(int i=h[x],y; i; i=nt[i])
{
y=to[i];
if(v[y])continue;
Tarjan(y,x);
fa[y]=x;
}
for(int i=0; i<e[x].size(); i++)
{
int y=e[x][i].first;
if(v[y]==2)
{
lca[e[x][i].second]=find(y);
}
}
v[x]=2;
}
int m,root;
signed main()
{
cin>>n>>m>>root;
for(int i=1; i<=n; i++)fa[i]=i;
for(int i=1,x,y; i<n; i++)
{
cin>>x>>y;
add(x,y);add(y,x);
}
for(int i=1,x,y; i<=m; i++)
{
cin>>x>>y;
add_e(x,y,i);
}
Tarjan(root,0);
for(int i=1; i<=m; i++)
{
cout<<lca[i]<<endl;
}
}