70分,求神牛相助
  • 板块P2078 朋友
  • 楼主ssy1234
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/8/18 15:31
  • 上次更新2023/10/27 14:46:19
查看原帖
70分,求神牛相助
571193
ssy1234楼主2022/8/18 15:31
#include<cstdio>
#include<cmath>
#include<iostream>
int n,m,p,q;
int fa[200005];
int mom[200005];
int num1[200005];//num[i]表示以i为祖宗的节点数
int num2[200005]; 
using namespace std;
int findf(int x)
{
	if(fa[x]==x) return x;
	return fa[x]=findf(fa[x]);
}
int findm(int x)
{
	if(mom[x]==x) return x;
	return mom[x]=findm(mom[x]);
}
int main()
{
	scanf("%d %d %d %d",&n,&m,&p,&q);
	for(int i=1;i<=p;i++)
	{
		fa[i]=i;
		num1[i]=1;
	}
	for(int i=1;i<=p;i++)
	{
		int x,y;
		scanf("%d %d",&x,&y);
		int fx=findf(x);
		int fy=findf(y);
		if(fx!=fy)
		{
			num1[fy]+=num1[fx];
			fa[fx]=fy;
			num1[fx]=0;
		}
	}
	for(int i=1;i<=q;i++)
	{
		mom[i]=i;
		num2[i]=1;
	}
	for(int i=1;i<=q;i++)
	{
		int x,y;
		scanf("%d %d",&x,&y);
		x=abs(x);
		y=abs(y);
		int fx=findm(x);
		int fy=findm(y);
		if(fx!=fy)
		{
			num2[fy]+=num2[fx];
			mom[fx]=fy;
			num2[fx]=0;
		}
	}
	int fx=findf(1);
	int fy=findm(1);
	printf("%d",min(num1[fx],num2[fy]));
}
2022/8/18 15:31
加载中...