雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

裸的并查集——pku2524

Posted on 2011-03-03 16:05  huhuuu  阅读(267)  评论(0编辑  收藏  举报

可以作为入门题练习,增加信心~~

View Code
#include<stdio.h>
#define N 50005

int f[N];
bool v[N];

int find(int pos)
{
if(f[pos]==-1)return pos;
return f[pos]=find(f[pos]);
}

int un(int a,int b)
{
int fa=find(a);
int fb=find(b);

if(fa==fb)return 0;
f[fa]
=fb;return 1;
}

int main()
{
int n,m,i,a,b,ca=1;
while(scanf("%d%d",&n,&m), n||m)
{
for(i=1;i<=n;i++)
{
f[i]
=-1;
v[i]
=0;
}

for(i=1;i<=m;i++)
{
scanf(
"%d%d",&a,&b);
un(a,b);
}

int temp;
for(i=1;i<=n;i++)
{
temp
=find(i);
v[temp]
=1;
}
int add=0;
for(i=1;i<=n;i++)
{
if(v[i]==1)
add
++;
}

printf(
"Case %d: ",ca++);
printf(
"%d\n",add);

}
}