【模版】并查集

模版算法

#include<iostream>
using namespace std;
int f[1000001];
string ans[100001];
int fi(int x){
	if(f[x]==x){
		return x;
	}
	else{
		return fi(f[x]);
	}
}
void hb(int x,int y){
	int xx=fi(x);
	int yy=fi(y);
	if(xx!=yy){
		f[xx]=yy;
	}
	return;
}
int main(){
	int n,m,p,x,y,a,b;
	cin>>n>>m>>p;
	for(int i=1;i<=n;i++){
		f[i]=i;
	}
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		hb(x,y);
	}
	for(int i=1;i<=p;i++){
		cin>>x>>y;
		a=fi(x);
		b=fi(y);
		if(a==b){
			ans[i]="Yes";
		}
		else{
			ans[i]="No";
		}
	}
	for(int i=1;i<=p;i++){
		cout<<ans[i]<<endl;
	}
	return 0;
}

模版练习题推荐

洛谷

Libre OJ

SPOJ

posted @ 2023-12-10 11:27  吃瓜猫linch  阅读(15)  评论(0)    收藏  举报