#include <algorithm> #include <functional> using namespace std; #define MAX 1001 int n,m,a,b,sum; int map[MAX]; int find(int node) { if(node==map[node]) { return node; } else { map[node]=find(map[node]); return map[node]; } } int main() { while(scanf("%d",&n)!=EOF && n!=0 && scanf("%d",&m)!=EOF) { memset(map,false,sizeof(map)); for(int i=1;i<=n;i++) { map[i]=i; } for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); map[find(a)]=find(b); } sum=0; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(find(i)!=find(j)) { sum++; map[find(i)]=find(j); } } } printf("%d\n",sum); } return 0; }
转载于:https://www.cnblogs.com/eslizn/archive/2012/07/04/2576258.html