Code
#include <stdio.h>
int parent[1000];//parent[i]表示的是 i 父母结点
int find(int x)
{
int r;
r=x;
while( parent[r]!=r )//查找 x 的父母结点,然后返回
r=parent[r];
return r;
}
int merge(int x,int y)
{
int px,py;//分别保存 x 和 y 的父母结点
px=find(x);
py=find(y);
if( px!=py )//如果 x 和 y 不是同一个集合的就合并
parent[px]=py;
return 0;
}
int main()
{
freopen("acm.txt","r",stdin);
int n,m,i,x,y,count;
while( scanf("%d",&n)!=EOF )
{
if( n==0 )
break;
for(i=1;i<=n;i++)
parent[i]=i;
scanf("%d",&m);
while( m-- )
{
scanf("%d%d",&x,&y);
merge(x,y);
}
count=-1;
for(i=1;i<=n;i++)
{
if( parent[i]==i )
count++;
}
printf("%d\n",count);
}
return 0;
}
#include <stdio.h>
int parent[1000];//parent[i]表示的是 i 父母结点
int find(int x)
{
int r;
r=x;
while( parent[r]!=r )//查找 x 的父母结点,然后返回
r=parent[r];
return r;
}
int merge(int x,int y)
{
int px,py;//分别保存 x 和 y 的父母结点
px=find(x);
py=find(y);
if( px!=py )//如果 x 和 y 不是同一个集合的就合并
parent[px]=py;
return 0;
}
int main()
{
freopen("acm.txt","r",stdin);
int n,m,i,x,y,count;
while( scanf("%d",&n)!=EOF )
{
if( n==0 )
break;
for(i=1;i<=n;i++)
parent[i]=i;
scanf("%d",&m);
while( m-- )
{
scanf("%d%d",&x,&y);
merge(x,y);
}
count=-1;
for(i=1;i<=n;i++)
{
if( parent[i]==i )
count++;
}
printf("%d\n",count);
}
return 0;
}