这题我思路是:合并完之后统计并查集有多少个集,然后输出就行了......
但是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