tarjan13 14WA求调(大悲
查看原帖
tarjan13 14WA求调(大悲
1025479
LIXE_115楼主2023/9/19 20:29
#include<bits/stdc++.h>
using namespace std;
#define Max 500050
long long N,M,S,fa[Max],ans[Max];
int vis[Max];
vector<long long>v[Max],vq[Max],id[Max];
void init(){
	memset(vis,false,sizeof(vis));
	for(int i=0;i<N;i++){
		fa[i]=i;
	}
	return;
}
int find(int x){
	return fa[x]==x?fa[x]:fa[x]=find(fa[x]);
}
void join(int a,int b){
	int ra=find(a),rb=find(b);
	if(ra!=rb){
		fa[a]=b;
	}
	return;
}
void tarjan(int x){
	vis[x]=1;
	for(int i=0;i<v[x].size();i++){
		int r=v[x][i];
		if(vis[r]==0){
			tarjan(r);
			fa[r]=x;	
		}
	}
	for(int i=0;i<vq[x].size();i++){
		int ux=vq[x][i],it=id[x][i];
		if(vis[ux]==2){
			ans[it]=find(ux);
		}
	}
	vis[x]=2;
	return;
}
int main(){
	cin>>N>>M>>S;
	init();
	for(int i=0;i<N-1;i++){
		int x,y;
		cin>>x>>y;
		v[x].push_back(y);
		v[y].push_back(x);
	}
	for(int i=1;i<=M;i++){
		int x,y;
		cin>>x>>y;
		if(x==y){
			ans[i]=x;
		}
		else{
			vq[x].push_back(y);
			vq[y].push_back(x);
			id[y].push_back(i);
			id[x].push_back(i);		
		}
	}
	tarjan(S);
	for(int i=1;i<=M;i++){
		cout<<ans[i]<<endl;
	}
	return 0;
}

rt

2023/9/19 20:29
加载中...