tarjan 0分求救
查看原帖
tarjan 0分求救
1200401
wnqnld_llx楼主2024/3/30 10:57
#include<bits/stdc++.h>
using namespace std;
const int N=5000100;
int n,m,s;
int fa[N];
vector<int>e[N];
vector<pair<int,int>>query[N];
int vis[N],ans[N];
int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
void tarjan(int u){
		vis[u]=1;
		for(auto v:e[u]){
			if(!vis[v]){
				tarjan(v);
				fa[v]=u;
			}
		}
		for(auto q:query[u]){
			int v=q.first,i=q.second;
			if(vis[v]){
				ans[i]=find(v);
			}
		}
}
int main(){
	cin>>n>>m>>s;
	for(int i=0;i<=N;i++) fa[i]=i;
	for(int i=1;i<n;i++){
		int a,b;
		cin>>a>>b;
		e[a].push_back(b);
		e[b].push_back(a);
	}
	for(int i=1;i<=m;i++){
		int a,b;
		cin>>a>>b;
		query[a].push_back({b,i});
		query[b].push_back({a,i});
		
	}
	tarjan(s);
	for(int i=1;i<=m;i++){
		cout<<ans[i]<<endl;
	}
	return 0;
}
2024/3/30 10:57
加载中...