hdu 1232(并查集)

/*
  Name: 并查集 
  Author: Try_86
  Date: 10/04/12 20:11
*/

#include <cstdio>
#include <iostream>

using namespace std;

const int M = 1000;

int p[M], sum;

void init(int n) {
    for (int i=1; i<=n; ++i) p[i] = i;
    return ;
}

int find(int x) {
    if (p[x] != x) p[x] = find(p[x]);
    return p[x];
}

void join(int x, int y) {
    x = find(x);
    y = find(y);
    if (x != y) {
        ++sum;
        p[x] = y;
    } 
    return ;
}

int main() {
    int n, m;
    while (scanf("%d%d", &n, &m), n) {
        init(n);
        sum = 1;
        int x, y;
        for (int i=0; i<m; ++i) {
            scanf ("%d%d", &x, &y);
            join(x, y);
        }
        printf ("%d\n", n-sum);
    } 
    return 0;
}

 

posted on 2012-04-10 20:12  Try86  阅读(178)  评论(0)    收藏  举报