并查集是一类相关的事物合并到一起,这题只要使用最基础的并查集的方法就可以求出。
#include<stdio.h>
int pa[1002];
int find(int k)
{
if(pa[k]!=k)
pa[k]=find(pa[k]);
return pa[k];
}
void bing(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)
pa[x]=y;
}
int main()
{
int n,m,x,y,ans;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
ans=-1;
for(int i=1;i<=n;i++)
pa[i]=i;
for(scanf("%d",&m);m>0;m--)
{
scanf("%d%d",&x,&y);
bing(x,y);
}
for(int i=1;i<=n;i++)
if(pa[i]==i)
{
ans++;
printf("%d\n",i);
}
printf("%d\n",ans);
}
return 0;
}