70分求助!
  • 板块P2078 朋友
  • 楼主CZ_7
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/12/12 10:15
  • 上次更新2023/11/5 06:15:22
查看原帖
70分求助!
348196
CZ_7楼主2020/12/12 10:15

男生女生分开算

#include<bits/stdc++.h>
using namespace std;
int n,m,p,q,fa1[100000],fa2[100000]; 
int find1(int x){
	if(fa1[x]==x)return x;
	return find1(fa1[x]);
}
int find2(int x){
	if(fa2[x]==x)return x;
	return find2(fa2[x]);
}
int join1(int x,int y){
	int dx=fa1[x];
	int dy=fa1[y];
	fa1[dy]=dx;
	return 0;
}
int join2(int x,int y){
	int dx=fa2[x];
	int dy=fa2[y];
	fa2[dy]=dx;
	return 0;
}
int main(){
	cin>>n>>m>>p>>q;
	for(int i=1;i<=n;i++){
		fa1[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;
		join1(find1(x),find1(y));
	}
	for(int i=1;i<=q;i++){
		cin>>x>>y;
		x=-x,y=-y;
		join2(find2(x),find2(y));
	}
	int ans1=0,ans2=0;
	for(int i=2;i<=p;i++){
		if(find1(i)==find1(1))ans1++;
	}
	for(int i=2;i<=q;i++){
		if(find2(i)==find2(1))ans2++;
	}
	cout<<min(ans1,ans2)+1;
	return 0;
}
2020/12/12 10:15
加载中...