20pts蒟蒻求调
查看原帖
20pts蒟蒻求调
746930
NO_OI_NO_LIFE楼主2023/7/24 00:04
#include <iostream>
#include <algorithm>
#include <stdio.h>
#define ll long long
#define MAXS 10005
using namespace std;

int n,m,p,q;

int xi,xj,yi,yj,ans1,ans2,f11[500005],f22[500005];

int find(int x){
	if(x==f11[x]) return x;
	return f11[x]=find(f11[x]);
}
int find2(int x){
	if(x==f22[x]) return x;
	return f22[x]=find2(f22[x]);
}

void join(int c1,int c2){
	int f1=find(c1),f2=find(c2);
	if(f1!=f2) f11[f1]=f2;
	return;
}
void join2(int c1,int c2){
	int f1=find(c1),f2=find(c2);
	if(f1!=f2) f22[f1]=f2;
	return;
}
int main(){
	cin>>n>>m>>p>>q;
	for(int i=1;i<=n;i++)
		f11[i]=i;
	for(int i=1;i<=m;i++)
		f22[i]=i;
	for(int i=1;i<=p;i++){
		cin>>xi>>xj;
		join(xi,xj);
	}
	for(int i=1;i<=q;i++){
		cin>>yi>>yj;
        yi*=-1;
        yj*=-1;
		join2(yi,yj);
	}
	int t1=find(1),t2=find(1);
	for(int i=1;i<=n;i++){
		if(t1==find(i))
			ans1++;
	}
	for(int i=1;i<=m;i++){
		if(t2==find2(i))
			ans2++;
	}
	printf("%d\n",min(ans1+1,ans2+1));
    return 0;
}
2023/7/24 00:04
加载中...