#include<iostream>
using namespace std;
int pre[1005];
int num[1005];
int find(int a){
int r=a;
while(r!=pre[r]){
r=pre[r];
}
int i=a;
while(i!=r){
int j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
void join(int a,int b){
int x=find(a);
int y=find(b);
if(x!=y){
pre[a]=b;
}
}
void init(){
for(int i=0;i<1005;i++){
pre[i]=i;
}
}
int main(){
int n,m,ans;
while(scanf("%d",&n) && n!=0){
ans=0;
init();
for(int i=0;i<1005;i++){
num[i]=0;
}
scanf("%d",&m);
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
join(a,b);
}
for(int i=1;i<=n;i++){
num[find(i)]=1;
}
for(int i=1;i<=n;i++){
if(num[i]==1)ans++;
}
cout<<ans-1<<endl;
}
return 0;
}
并查集
最新推荐文章于 2024-07-29 20:58:50 发布