并查集AC代码
#include<stdio.h>
int parent[1010];
int n,rel,x,y;
int find(int x){
int t_val=x;
while(parent[t_val]!=-1)
t_val=parent[t_val];
return t_val;
}
void union_xy(int x,int y){
int root_x=find(x);
int root_y=find(y);
if(root_x!=root_y){
parent[root_x]=root_y;
}
}
int count(int n){
int ans=0;
for(int i=1;i<=n;i++){
if(parent[i]==-1)
ans+=1;
}
return ans-1;
}
int main(){
while(1){
scanf("%d",&n);
if(n==0)
break;
scanf("%d",&rel);
for(int i=1;i<=n;i++)
parent[i]=-1;
for(int i=0;i<rel;i++){
scanf("%d %d",&x,&y);
union_xy(x,y);
}
int ans=count(n);
printf("%d\n",ans);
}
return 0;
}