poj 2524 Ubiquitous Religions 并查集问题

题目连接 :http://poj.org/problem?id=2524

题目大意。已知有n个大学生,其中有m对宗教信仰相同的学生,请你估算这n个学生中最多有多少种宗教信仰。

不多说直接上代码~

View Code
#include<stdio.h>
int set[50005];
int find(int x)
{
    int r = x;
    while(set[r] != r)
    {
        r = set[r];
    }
    return r;
}
void merge(int a,int b)
{
    a = find(a);
    b = find(b);

    if(a == b)
        return ;
    else
        set[a] = b;
}

int main()
{
    int i,j,n,a,m,b;
    j = 0;
    while(scanf("%d %d",&n,&m)&&n||m)
    {
        j++;
        for(i = 1;i <= n;i++)
            set[i] = i;

        while(m--)
        {
            scanf("%d %d",&a,&b);
            merge(a,b);
        }

        int count = 0;
        for(i =1;i <= n;i++)
            if(set[i] == i)
                count++;
        printf("Case %d: %d\n",j,count);
        
    }
    return 0;
}
posted @ 2012-07-17 14:13  某某。  阅读(130)  评论(0编辑  收藏  举报