您的位置:首页 > 其它

POJ2524 并查集水题

2016-10-29 20:02 309 查看
#include<stdio.h>
int father[50001];
int find(int p)
{
return p == father[p] ? p : (father[p] = find(father[p]));
}
void merge(int a,int b)
{
int x = find(a);
int y = find(b);
if (x != y)
father[y] = x;
}
int main()
{
int m,n;
int i;
int a,b;
int q;
int num = 0;
while(scanf("%d%d",&n,&m))
{
num++;
q = 0;
if(n == 0 && m == 0)
break;
for(i = 1;i <= n;i++)
father[i]=i;
for (i = 0; i < m;i++)
{
scanf("%d%d",&a,&b);
merge(a,b);
}
for (i = 1;i <= n;i++)
{
if(father[i] == i)
q++;
}
printf("Case %d: %d\n",num,q);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: