求助:P2078
  • 板块灌水区
  • 楼主_zsy_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/23 13:19
  • 上次更新2024/3/23 15:25:34
查看原帖
求助:P2078
1264271
_zsy_楼主2024/3/23 13:19

题目链接 测试点记录

#include<bits/stdc++.h>
using namespace std;
int n,p,m,q;
int x,y;
int a1[10005],a2[10005];//建立两个并查集,a1为n公司,a2为m公司 
int find1(int j)
{
	if(a1[j]!=j)j=find1(a1[j]);
	return j;
}
int find2(int k)
{
	if(a2[k]!=k)k=find2(a2[k]);
	return k;
}
int main()
{
	scanf("%d%d%d%d",&n,&p,&m,&q);
	int cnt1=0,cnt2=0;//分别记录小明小红认识的总人数 
	for(int i=1;i<=n;i++)a1[i]=i;//初始化 
	for(int i=1;i<=m;i++)a2[i]=i;
	for(int i=0;i<p;i++)
	{
		scanf("%d%d",&x,&y);
		int fx=find1(a1[x]);
		int fy=find1(a1[y]);
		if(fx!=fy)a1[fx]=a1[fy];
	}
	for(int i=0;i<q;i++)
	{
		scanf("%d%d",&x,&y);
		int fx=find2(a2[-x]);
		int fy=find2(a2[-y]);
		if(fx!=fy)a2[fx]=a2[fy];
	}
	for(int i=1;i<=n;i++)a1[i]=find1(a1[i]);
	for(int i=1;i<=m;i++)a2[i]=find2(a2[i]);
	x=a1[1],y=a2[1];
	for(int i=1;i<=n;i++)if(a1[i]==x)cnt1++;//查询认识的人 
	for(int i=1;i<=m;i++)if(a2[i]==y)cnt2++;
	printf("%d",min(cnt1,cnt2));
	return 0;
}
2024/3/23 13:19
加载中...