#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int city[1001],flag[1001];
int find(int a)
{
if(city[a]==-1) /*已是根节点*/
return a;
else return city[a]=find(city[a]);
}
int add(int x,int y) /*若x,y*/
{
int xroot,yroot;
xroot=find(x);
yroot=find(y);
if(xroot==yroot)/*x,y已在同一集合内*/
return 0;
else city[yroot]=xroot;/*x,y根节点不同,把x,y并入同一集合*/
}
int main()
{
int i,n,m,x,y,k;
while((scanf("%d",&n)!=EOF)&&n)
{
memset(city,-1,sizeof(city));
memset(flag,0,sizeof(flag));
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&x,&y);
add(x,y);
}
for(i=1; i<=n; i++)
{
flag[find(i)]=1;
}
k=0;
for(i=1; i<=n; i++)
{
if(flag[i]==1)
k+=1;
}
printf("%d\n",k-1);
}
return 0;
}
HDU-1232-畅通工程
最新推荐文章于 2021-05-11 20:39:26 发布