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;

}

 

你可能感兴趣的:(HDU)