版权声明:我的就是我的 https://blog.csdn.net/qq_41638851/article/details/89285578
#include<bits/stdc++.h>
using namespace std;
int bin[100002]; //分组标识数组
int findx(int x){
int r=x;
while(bin[r]!=r)
r=bin[r];
return r;
}
void merge(int x,int y){
int fx,fy;
fx=findx(x);
fy=findx(y);
if(fx!=fy)
bin[fx]=fy;
}
int main(){
int n,m;
int i;
int x,y,count;
while(cin>>n>>m,n){
for(i=1;i<=n;i++)
bin[i]=i;
for(;m>0;m--){
cin>>x>>y;
merge(x,y);
}
for(count=-1,i=1;i<=n;i++)
if(bin[i]==i)
count++;
cout<<count<<endl;
}
return 0;
}