20pts 求调
  • 板块P2078 朋友
  • 楼主zyt__dp
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/17 16:52
  • 上次更新2024/10/17 19:29:27
查看原帖
20pts 求调
1378812
zyt__dp楼主2024/10/17 16:52
#include<bits/stdc++.h>
using namespace std;
constexpr int N=3e5+7;
int fa[N][100];
int find1(int x) {
	if(fa[x][0]==x) {
		return fa[x][0];
	}
	fa[x][0]=find1(fa[x][0]);
	return fa[x][0];
}
int find2(int x){
	if(fa[x][1]==x){
		return fa[x][1];
	}
	fa[x][1]=find2(fa[x][1]);
	return fa[x][1];
}
int main() {
	int n,m,q,p;
	scanf("%d%d%d%d",&n,&m,&q,&p);
	for(int i=1;i<=n;i++){
		fa[i][0]=i;
	}
	for(int j=1;j<=m;j++){
		fa[j][1]=j;
	}
	for(int i=1;i<=q;i++){
		int a,b;
		scanf("%d%d",&a,&b);
		int x=find1(a),y=find1(b);
		if(x==y)continue;
		fa[y][0]=x;
	}
	for(int i=1;i<=p;i++){
		int a,b;
		scanf("%d%d",&a,&b);
		a=-a,b=-b;
		int x=find2(a),y=find2(b);
		if(x==y)continue;
		fa[y][1]=x;
	}
	int sum1=0,sum2=0;
	for(int i=1;i<=n;i++){
		if(fa[i][0]==1)sum1++;
		//if(fa[i][1]==1)sum2++;
	}
	for(int i=1;i<=m;i++){
		if(fa[i][1]==1)sum2++;
	}
	cout<<min(sum1,sum2);
	return 0;
} 

20pts 求调

2024/10/17 16:52
加载中...