代码:
#include<bits/stdc++.h>
using namespace std;
int fa[500001],vis[500001];
vector<int>e[500001],q[500001];
int find(int x){
return fa[x]==x?x:find(fa[x]);
}
void dfs(int x){
vis[x]=1;
for(int i=0;i<e[x].size();++i){
if(!vis[e[x][i]]){ dfs(e[x][i]); fa[e[x][i]]=x; }
}
for(int i=0;i<q[x].size();++i){
if(vis[q[x][i]]){ cout<<find(q[x][i])<<"\n";
}
}
int main(){
int n,m,s,x,y;
cin>>n>>m>>s;
for(int i=1;i<n;++i){
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
for(int i=1;i<=m;++i){
cin>>x>>y;
q[x].push_back(y);
q[y].push_back(x);
}
for(int i=1;i<=n;++i) fa[i]=i;
dfs(s);
return 0;
}