andre_joy

导航

hdu 1232

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1232

题意:中文……

mark:并查集。

代码:

#include <stdio.h>

int s[1010];

int find(int a)
{
    if(s[a] == a) return a;
    return s[a] = find(s[a]);
}

void merge(int a, int b)
{
    int p = find(a), q = find(b);
    if(p != q) s[p] = q;
}

int main()
{
    int n,m,a,b;
    int i,sum;
    while(scanf("%d", &n), n)
    {
        scanf("%d", &m);
        for(i = 1; i <= n; i++) s[i] = i;
        for(i = 0; i < m; i++)
        {
            scanf("%d%d", &a, &b);
            merge(a, b);
        }
        sum = 0;
        for(i = 1; i <= n; i++)
            if(s[i] == i) sum++;
        printf("%d\n", sum-1);
    }
    return 0;
}

posted on 2012-07-13 13:58  andre_joy  阅读(163)  评论(0编辑  收藏  举报