蒟蒻求助(并查集)
查看原帖
蒟蒻求助(并查集)
127925
Kio_楼主2020/8/15 14:59

这题我思路是:合并完之后统计并查集有多少个集,然后输出就行了......

但是WA了 TAT 不知道为啥

代码如下

#include<cstdio>
using namespace std;
int a[50020];
int find(int x)
{
	if(x!=a[x]) a[x]=find(a[x]);
	return a[x];
}
void _union(int x,int y)
{
	int x1=find(x),y1=find(y);
	a[y1]=x1;
}
int read()
{
	int num=0;
	char c=getchar();
	while(c<'0'||c>'9')c=getchar();
	while('0'<=c&&c<='9'){
	
	num=num*10+c-'0';c=getchar();}
//	if('0'<=c&&c<='9')
//	{
//		
//		while('0'<=c&&c<='9')num=num*10+c,c=getchar();
//	}
//	else 
//	{
//		c=getchar();
//		while('0'<=c&&c<='9')num=num*10+c,c=getchar();
//	}
	return num;
}
int n=-1,m=-1;
int main()
{
	
	
	int x=-1,y=-1;
	while(n!=0&&m!=0)
	{
		n=read();m=read();
		if(n==0&&m==0)return 0;
		
		for(int i=1;i<=n;i++)a[i]=i;
		
		for(int i=1;i<=m;i++){
			x=read();y=read();
			_union(x,y);
		}
	
		int _case=1,num=0;
		for(int i=1;i<=n;i++)
		{
			if(a[i]==i)
			{
				num++;
			}
		}
			printf("Case %d: %d\n",_case,num);
			_case++;
	}
	return 0;
}

求大佬指教QwQ

2020/8/15 14:59
加载中...