并查集 60 #2RE 求教
  • 板块P2078 朋友
  • 楼主Lhz1313
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/7/24 17:31
  • 上次更新2023/11/6 22:24:00
查看原帖
并查集 60 #2RE 求教
311830
Lhz1313楼主2020/7/24 17:31
#include<stdio.h>
#include<iostream>
#include<math.h>
#define NM 10005
#include<algorithm>
using namespace std;
int a[NM],N,M,P,Q,b[NM];
void join(int num,int y,int c[NM],int x)
{
	int i;
	for(i=1;i<=num;i++)
	{
		if(c[i]==y)
		c[i]=x;		
	}
}
int main()
{
	scanf("%d%d%d%d",&N,&M,&P,&Q);
	int i,x,y,num1=0,num2=0;
	for(i=1;i<=P;i++)
	a[i]=i;
	for(i=1;i<=Q;i++)
	b[i]=i;
    for(i=1;i<=P;i++)
    {
    	scanf("%d%d",&x,&y);
    	if(a[x]!=a[y])
    	join(P,a[y],a,a[x]);    	
	}
	for(i=1;i<=Q;i++)
    {
    	scanf("%d%d",&x,&y);
    	int fx=(-1)*x,fy=(-1)*y;
    	if(b[fx]!=b[fy])
    	join(Q,b[fy],b,b[fx]);    	
	}
	for(i=1;i<=P;i++)
    {
    	if(a[i]==a[1])
		num1++;	
	}
	for(i=1;i<=Q;i++)
    {
    	if(b[i]==b[1])
		num2++;	
	}
	if(P==0||Q==0)
	cout<<1;
	else
	cout<<min(num1,num2);
}
2020/7/24 17:31
加载中...