Ubiquitous Religions-并查集(5)

Description

There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in finding out how many different religions students in your university believe in.

You know that there are n students in your university (0
< n <= 50000). It is infeasible for you to ask every student their
religious beliefs. Furthermore, many students are not comfortable
expressing their beliefs. One way to avoid these problems is to ask m (0
<= m <= n(n-1)/2) pairs of students and ask them whether they
believe in the same religion (e.g. they may know if they both attend the
same church). From this data, you may not know what each person
believes in, but you can get an idea of the upper bound of how many
different religions can be possibly represented on campus. You may
assume that each student subscribes to at most one religion.

Input

The input consists of a number of cases. Each case starts with a line
specifying the integers n and m. The next m lines each consists of two
integers i and j, specifying that students i and j believe in the same
religion. The students are numbered 1 to n. The end of input is
specified by a line in which n = m = 0.

Output

For each test case, print on a single line the case number (starting
with 1) followed by the maximum number of different religions that the
students in the university believe in.

Sample Input

10 9
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
10 4
2 3
4 5
4 8
5 8
0 0

Sample Output

Case 1: 1
Case 2: 7

Hint

Huge input, scanf is recommended.

#include <cstdio>
int x,y,pa[1000000];
int cha(int k)
{
    if(pa[k]!=k)
    {
        pa[k]=cha(pa[k]);
    }
    return pa[k];
}
bool bing(int x,int y)
{
    int x2=cha(x);
    int y2=cha(y);
    if(x2==y2)
        return false;
    pa[y2]=x2;
    return true;
}
void init(int n)
{
    for(int i=0; i<=n; i++)
    {
        pa[i]=i;
    }
}
int main()
{
    int n,m,k,a,b,cas=1,i;
    while(scanf("%d%d",&n,&m)&&(m+n))
    {int count=0;
    init(n);
        for(i=1; i<=m; i++)
        {
            scanf("%d%d",&a,&b);
            bing(a,b);
        }
        for(i=1;i<=n;i++)
        {
            if(pa[i]==i)//直接求根节点的个数就可以得知
                count++;
        }
        printf("Case %d: %d\n",cas++,count);
    }
    return 0;
}
时间: 2024-08-22 10:16:24

Ubiquitous Religions-并查集(5)的相关文章

POJ 2524 Ubiquitous Religions (幷查集)

Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23090   Accepted: 11378 Description There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in findi

[ACM] POJ 3295 Ubiquitous Religions (并查集)

Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23093   Accepted: 11379 Description There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in findi

POJ 2524-Ubiquitous Religions(并查集)

Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 25383   Accepted: 12530 Description There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in findi

并查集&amp;MST

[HDU] 1198 Farm Irrigation 基础最小生成树★ 1598 find the most comfortable road 枚举+最小生成树★★ 1811 Rank of Tetris 并查集+拓扑排序★★ 3926 Hand in Hand 同构图★ 3938 Portal 离线+并查集★★ 2489     Minimal Ratio Tree dfs枚举组合情况+最小生成树★ 4081     Qin Shi Huang's National Road System 最

POJ Ubiquitous Religions (并查集)

Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 25255   Accepted: 12454 Description There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in findi

POJ 2524 Ubiquitous Religions (简单并查集,三种方式)

Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 30791   Accepted: 14928 Description There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in findi

SDUT Ubiquitous Religions(并查集+哈希)

Ubiquitous Religions Time Limit: 1000MS Memory limit: 65536K 题目描述 There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in finding out how many different religions students in your

poj 2524:Ubiquitous Religions(并查集,入门题)

Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23997   Accepted: 11807 Description There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in findi

POJ 2524 Ubiquitous Religions Union Find 并查集

本题是标准的并查集了,最后利用这些集求有多少独立集. 所以这里也写个标准程序过了. 最后查找独立集合: 看有多少个节点的父母节点是自己的,那么就是独立集合了.自己做自己的父母当然最独立的了,没有任何依赖,呵呵. #include <stdio.h> const int MAX_N = 50001; //const int MAX_M = MAX_N/2 * (MAX_N-1) + 1; int N, M; struct SubSet { int p, r; }; SubSet sub[MAX_

poj 2524 Ubiquitous Religions(并查集)

Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23168   Accepted: 11404 Description There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in findi