Ubiquitous Religions
 
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 22389   Accepted: 11031

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.
讲解:并查集很好玩啊,哈哈。。。
        题目的大体意思是说,这个学校有n个人,编号1 到 n,下面输入 m 行,每行两个人,两个人在一个种族中;如果有人不在这个学校中,即编号大于n,则忽略不计;
        学校想给每个种族发一种东西,所以你要统计共有多少个种族,如果此人没有出现,则可认为他自己是一个种族,因为要求最大的;
        总共的就是 种族数加上没出现的人的个数;
        算是一个入门级的并查集应用了,比食物链那道题要简单多了,
上面是 scanf, 下面是  cin  时间上的差别很明显啊
AC代码:
 #include<algorithm>
#include<iostream>
#include<cstring>
#include<set>
#include<cstdio>
using namespace std;
int father[];
int vis[];//用来标记出现过没有;
void begin(int m)
{
for(int i=;i<=m;i++)
{father[i]=i;vis[i]=;} }
int find(int x)
{
if(father[x]!=x)
{
father[x]=find(father[x]);
}
return father[x];
}
int main()
{
int m,n,x,y,a,b,mm,ans,k=;
while(scanf("%d %d",&m,&n) && m+n)
{ ans=;mm=; //mm 统计的是出现的个数,减去就是没出现的个数;
begin(m);
for(int i=;i<=n;i++)
{
scanf("%d %d",&x,&y);//输入尽量用scanf(344ms),cin(4688ms)差别略大啊;
if(x<=m && y<=m)
{
a=find(x);b=find(y);//各找各的父亲;
father[a]=b;
if(vis[x]==) //标记统计出现过多少个数;
{mm++;vis[x]=;}
if(vis[y]==)
{mm++;vis[y]=;}
}
}
for(int i=;i<=m;i++) //统计共有几个集合,实在不好想,用了个笨方法;
{
if(father[i]==i && vis[i]==)//父亲的父亲,是他本身,并且他已经出现过了
ans++;
}
printf("Case %d: %d\n",k++,ans+m-mm);
}
return ;
}

poj 2524 Ubiquitous Religions 一简单并查集的更多相关文章

  1. POJ 2524 独一无二的宗教(裸并查集)

    题目链接: http://poj.org/problem?id=2524 Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K ...

  2. poj 2524 Ubiquitous Religions(简单并查集)

    对与知道并查集的人来说这题太水了,裸的并查集,如果你要给别人讲述并查集可以使用这个题当做例题,代码中我使用了路径压缩,还是有一定优化作用的. #include <stdio.h> #inc ...

  3. [ACM] POJ 2524 Ubiquitous Religions (并查集)

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23093   Accepted:  ...

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

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23997   Accepted:  ...

  5. poj 2524 Ubiquitous Religions(并查集)

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23168   Accepted:  ...

  6. POJ 2524 Ubiquitous Religions (幷查集)

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 23090   Accepted:  ...

  7. POJ 2524 Ubiquitous Religions (并查集)

    Description 当今世界有很多不同的宗教,很难通晓他们.你有兴趣找出在你的大学里有多少种不同的宗教信仰.你知道在你的大学里有n个学生(0 < n <= 50000).你无法询问每个 ...

  8. 【原创】poj ----- 2524 Ubiquitous Religions 解题报告

    题目地址: http://poj.org/problem?id=2524 题目内容: Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 6 ...

  9. POJ 2524 Ubiquitous Religions

    Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 20668   Accepted:  ...

随机推荐

  1. nose的setup和teardown

    参考:http://blog.csdn.net/linda1000/article/details/8533349 1.模块的setUp和tearDown def setUp(): print &qu ...

  2. ECMA-262,第 5 版 最新 JavaScript 规范

    ECMA-262,第 5 版 最新 JavaScript 规范 Rob Larsen, 界面架构师, IBM 简介: 了解 ECMAScript 规范的历史,查看它的众多重要新特性和新概念. 发布日期 ...

  3. go语言基础之break和continue的区别

    1.break和continue的区别 在循环里面有两个关键操作break和continue,break操作是跳出当前循环,continue是跳过本次循环. 2.break 备注:break可⽤于fo ...

  4. 关于Javascript你可能不知道的事

    NaN表示一个不能产生正常结果的运算结果.它不等于任何值,包括它自己.可以用isNaN(number)来检测. 同Java中的字符串一样,JS中的字符串是不可变的.也就是说一旦字符串被创建,就无法改变 ...

  5. leetcode笔记:First Bad Version

    一. 题目描写叙述 You are a product manager and currently leading a team to develop a new product. Unfortuna ...

  6. windows10 onenote 显示英文 怎么办?

    转自:https://jingyan.baidu.com/article/fdffd1f85d064df3e98ca108.html 原因:首选输入法为英文. 方法:修改,调整首选为中文. 1.右下角 ...

  7. MySQL for Mac安装和启动

    MySQL for Mac安装和启动 学习了:https://blog.csdn.net/a380880304/article/details/49840139 注意密码是数字1还是字母l: 系统提示 ...

  8. Event.RESIZE 的事件不触发

    stage.scaleMode=StageScaleMode.NO_SCALE;(或者设置其他缩放模式,如EXACT_FIT等):   如果没有设置 stage的缩放模式的话, stage.addEv ...

  9. 浅谈PHP数据结构之栈

    今天開始进阶自己的PHP,首先一切的编程语言都须要修炼自己的"内功",何为程序猿的"内功",我想大概就是数据结构和算法了吧 .毕竟是灵魂,是普通程序猿到高级程序 ...

  10. 基于JUnit3.8的一个简单的测试程序

    实现一个简单的计算 注:目标类和测试类要放在同一包下, JUnit单元测试基础要点 目标类:Calculator.java package com.junit3_8; public class Cal ...