只对了第一个
对tarjan了解得不是很透彻,勿喷qwq
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=5e5+5;
int fa[N],vis[N],n,m,s,ans[N],x,y,ok[N];
struct vv{
int to,id;
};
vector<int> g[N];
vector<vv> q[N];
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void dfs(int x,int y){
vis[x]=1;
for(int i=0;i<g[x].size();i++){
int j=g[x][i];
if(j==y) continue;
dfs(j,x);
fa[j]=x;
for(int k=0;k<q[j].size();k++){
int v=q[j][k].to;
if(vis[v]) ans[q[j][k].id]=find(v);
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<n;i++){
scanf("%d%d",&x,&y);
g[x].pb(y); g[y].pb(x);
}
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
ok[i]=(x==y)*x;
q[x].pb({y,i}); q[y].pb({x,i});
}
dfs(s,0);
for(int i=1;i<=m;i++){
printf("%d\n",ok[i]?ok[i]:ans[i]);
}
return 0;
}