# include <stdio.h>
# include <string.h>
int node[1005];
int getfather(int a)
{
return (node[a]==a)?a:(node[a]=getfather(node[a]));
}
int main ()
{
int m,n,i;
int a,b,mark;
while(scanf("%d",&m)!=EOF)
{
if(m==0)
break;
scanf("%d",&n);
for(i=0;i<=m;i++)
{node[i]=i;}
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
int t1 = getfather(a);
int t2 = getfather(b);
node[a]=t1;
node[b]=t2;
if(t1!=t2)
{
node[t2]=t1;
}
}
mark=0;
for(i=1;i<=m;i++)
if(node[i]==i)
mark++;
printf("%d\n",mark-1);
}
return 0;
}
并查集的问题 注意 node[t2]=t1; 这样才是把两棵树合并成一棵树