世界上有许多不同的宗教,现在有- 个你感兴趣的问题:找出多少不同的宗教,在你的大学中的大学生信仰了多少种不同的宗教你知道在你的大学有n个学生(0 <n5000).若直接问每一个学生的宗教信仰不大适合.此外,许多学生还不太愿意说出自己的信仰有一种方法来避免这个问题,询问m(0≤m≤n(n-1)/2)对学生,询问他们是否信仰同一个宗教(比如,可以询问他们是否都参加同一教堂).从这个数据,你可能不知道每个人宗教信仰,但是你可以知道有多少种宗教.假设每名学生最多信仰一个宗教.口输入
输人
包含 多组测试数据每组测试数据的开头包含两个整数n和m.接下来有m行,每行有两个整数i和j,编号为i和j的同学信仰同一个宗教学生的编号从1开始到n.当输入使n=0,m=0,标志输人的结束口输出结束。
输出
每组测试数据的输出只有一行,包含数据的组别(从1开始)和学生最多信仰的宗教的宗教数。
样例输入
10 9
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
10 4
2 3
4 5
4 8
5 8
0 0
样例输出
Csae 1:1
Case 2: 7
#include<iostream>
#include<string.h>
#define max 50005
using namespace std;
int f[max];
int init()
{
for(int i=0;i<=max;i++)
{
f[i]=i;
}
}
int find(int x)
{
if(x==f[x])
{
return x;
}
else
{
return find(f[x]);
}
}
void hebing(int x,int y)
{
int xx=find(x);
int yy=find(y);
if(xx!=yy)
{
f[xx]=yy;
}
}
int main()
{
int n,m;
int cut=1;
while(cin>>n>>m)
{
if(n==0&&m==0)
{
break;
}
init();
while(m--)
{
int a,b;
cin>>a>>b;
hebing(a,b);
}
int sum=0;
for(int i=1;i<=n;i++)
{
if(f[i]==i)
{
sum++;
}
}
cout<<"case "<<cut<<": ";
cout<<sum<<endl;
cut++;
}
return 0;
}