规整一点,将各个步骤写成函数,所以函数调用浪费了时间
#include
using namespace std;
//union_find
//水题,先把每人看成一个社团,然后合并一个,减一就好
int father[50005];
int ans;
void init(int n)
{
for(int i = 1; i<=n; ++i)
father[i] = i;
}
int find(int x)
{
return x==father[x]?x:father[x]=find(father[x]);
}
void merge(int a,int b)
{
int x = find(a);
int y = find(b);
if(x!=y)
{
ans--;
father[x] = y;
}
}
int main()
{
int n,m;
int k = 1;
int a,b;
while(~scanf("%d%d",&n,&m),n)
{
init(n);
ans = n;
for(int i = 1; i<=m; ++i)
{
scanf("%d%d",&a,&b);
merge(a,b);
}
printf("Case %d: %d\n",k++,ans);
}
return 0;
}
京公网安备 11010502036488号