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. LaTeX排版设置图表的位置 Positioning images and tables

    Positioning images and tables LATEX is an editing tool that takes care of the format so you only hav ...

  2. OpenJudge 8782 乘积最大——S.B.S

    8782:乘积最大 总时间限制: 1000ms 内存限制:  65536kB 描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江 ...

  3. Ubuntu挂载samba共享目录

    Ubuntu中现在没有smbfs了,所以smbmount命令也用不了了,现在可以使用mount.cifs命令来挂载. Usage:  mount.cifs <remotetarget> & ...

  4. Microsoft Bot Builder Overview

    微软机器人构建器概述 微软机器人Builder是一个强大的框架构建机器人可以处理自由交互和更多的引导,这种可能性是显式地显示给用户. 它很容易使用和利用c#写机器人提供一个自然的方式. 高级功能: 强 ...

  5. [88221008]调用新下单接口失败,result:162020004,resInfo

    [88221008]调用新下单接口失败,result:162020004,resInfo

  6. Google POI下载工具破解之路

    我是GIS初学者,爱好二次开发,像初恋一样.最近对编译感兴趣,每当成功获取一点信息,就有一种快感,感觉马上就要成功了……其实,还早! 01.初次反编译 今天在微创业工作室找到了Google POI下载 ...

  7. Android 使用ORMLite 操作数据库

    参考:http://blog.csdn.net/cjjky/article/details/7096987 ormlite 方法查询:http://ormlite.com/javadoc/ormlit ...

  8. 安装TeX及中文支持

    2014.7.19更新: 以下的笔记适用于在基于Ubuntu的发行版(比方LinuxMint)安装Texlive2013.2014: 第一步依据本机状况.可能不须要. Texlive2014已经能够下 ...

  9. alibaba dexposed初步解析

    alibaba新出了一个非侵入的aop库,感觉不错.那么楼主这次就来学习一下这个库的详细应用,原理以及能够达到的效果. 这里先给出相应的githubproject传送门:https://github. ...

  10. chrome 如何官网下载谷歌浏览器离线安装包

      如何官网下载chrome谷歌浏览器离线安装包 CreateTime--2017年7月4日08:38:30Author:Marydon 参考链接:http://jingyan.baidu.com/a ...