#include<stdio.h> #define max 1005 int data[max]; int find_set(int x){ if(data[x]==-1) return x; data[x]=find_set(data[x]); return data[x]; } void union_set(int x,int y){ int a=find_set(x); int b=find_set(y); if(a!=b){ data[a]=b; } } int main(){ int n,m; int count; int a,b; int i; while(scanf("%d",&n)!=EOF){ if(n==0) break; count=0; for(int i=1;i<=n;i++) data[i]=-1; scanf("%d",&m); for(i=0;i<m;i++){ scanf("%d%d",&a,&b); union_set(a,b); } for(int i=1;i<=n;i++){ if(data[i]==-1) count++; } count--; printf("%d\n",count); } return 0; }Problem Description
原文:http://blog.csdn.net/sn_zzy/article/details/23595035