标签:acm
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std; #define maxn 1000 + 10 int p[maxn], n, m; //bool mark[maxn]; //int Rank[maxn]; void init() { for(int i=1; i<=n; i++) p[i] = i; //memset(Rank, 0, sizeof(Rank)); // memset(mark, false, sizeof(mark)); } int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); } int main() { while(~scanf("%d", &n) && n) { cin>>m; int cnt = n - 1; init(); while(m--) { int a, b; scanf("%d%d", &a, &b); int x = find(a); int y = find(b); /* if(x != y) { if(Rank[x] > Rank[y]) p[y] = x; else { p[x] = y; if(Rank[x] == Rank[y]) Rank[y]++; } } */ if(x != y) { p[x] = y; cnt--; } } /* for(int i=1; i<=n; i++) { int a = p[i]; //cout<<a<<" "; if(!mark[a]) { cnt++; mark[a] = true; } } cout<<cnt - 1<<endl; */ cout<<cnt<<endl; } return 0; }
标签:acm
原文地址:http://blog.csdn.net/dojintian/article/details/44985433