并查集板子,但40pts求调
  • 板块P2078 朋友
  • 楼主Clean_Breeze
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/2/29 18:50
  • 上次更新2024/2/29 20:53:22
查看原帖
并查集板子,但40pts求调
218386
Clean_Breeze楼主2024/2/29 18:50
#include <bits/stdc++.h>

using namespace std;
int par[10005];

void init(int N){
	for(int i = 1; i <= N; i++) par[i] = i;
}
int find(int x){
	int r = x;
	while(par[r] != r){
		r = par[r];
	}
	par[x] = r;
	return r;
	
}

void merge(int x,int y){
	x = find(x);
	y = find(y);
	par[max(x,y)] = min(x,y);
}

signed main()
{
	int n,m,p,q;cin >> n >> m >> p >> q;
	
	int fria = 0;
	init(n);
	while(p--){
		int x,y;cin >> x >> y;
		
			merge(x,y);
		
	}
	for(int i = 1;i <= n;i++) if(find(i) == 1) fria ++;
	int ans = 1e6;
	ans = min(fria,ans);
	
	int frib = 0;
	init(m);
	while(q--){
		int x,y;cin >> x >> y;
		x = abs(x);y = abs(y);
			merge(x,y);
	}
	
	for(int i = 1;i <= n;i++) if(find(i) == 1) frib ++;
	
	ans = min(ans,frib);
	cout << ans;
	return 0;
}
2024/2/29 18:50
加载中...