求助,20分并查集
查看原帖
求助,20分并查集
463851
Untitled_628496楼主2023/6/17 19:10
#include<bits/stdc++.h>
using namespace std;
int n,m,p,q,ans1,ans2,fa[114514],fa2[114514];
int find(int k){
	if(fa[k]==k){
		return k; 
	}else{
		fa[k]=find(fa[k]); 
		return fa[k]; 
	}
}
int find2(int k){
	if(fa2[k]==k){
		return k; 
	}else{
		fa2[k]=find(fa2[k]); 
		return fa2[k]; 
	}
}

void uni1(int x,int y){
	fa[find(x)]=find(y); 
} 
void uni2(int x,int y){
	fa2[find2(x)]=find2(y); 
} 

int main(){
	cin >> n >> m >> p >> q;
	for(int i=1;i<=n;i++){
		fa[i]=i; 
	} 
	for(int i=1;i<=m;i++){
		fa2[i]=i; 
	} 
	
	int x,y;
	for(int i=1;i<=p;i++){
		cin >> x >> y;
		uni1(x,y);
	}
	for(int i=1;i<=q;i++){
		cin >> x >> y;
		x=-x;
		y=-y; 
		uni2(x,y);
	}
	for(int i=1;i<=n;i++){
		if(find(i)==find(1)) ans1++; 
	} 
	for(int i=1;i<=m;i++){
		if(find2(i)==find2(1)) ans2++; 
	}
	cout << min(ans1,ans2); 
	return 0;
} 
2023/6/17 19:10
加载中...