#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000+10;
int t[maxn];
int pre[maxn];
int n,m;
int find(int x){ //查找
return pre[x]==x ? x : find(pre[x]);
}
void Union(int x,int y){ //合并
int fx=find(x),fy=find(y);
if(fx!=fy){
pre[fx]=fy;
}
}
int main(){
while(scanf("%d%d",&n,&m)==2 && n){
for(int i=1;i<=n;i++) //初始化处理
pre[i]=i;
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
Union(a,b);
}
memset(t,0,sizeof(t));
for(int i=1;i<=n;i++){
t[find(i)]=1;
}
int ans=0;
for(int i=1;i<=n;i++){
if(t[i])ans++;
}
printf("%d\n",ans-1);
}
return 0;
}
HDU 1232 畅通工程
最新推荐文章于 2024-07-24 08:30:00 发布