博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ubiquitous Religions(friends变形)
阅读量:6840 次
发布时间:2019-06-26

本文共 2014 字,大约阅读时间需要 6 分钟。

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 91 21 31 41 51 61 71 81 91 1010 42 34 54 85 80 0

Sample Output

Case 1: 1Case 2: 7
 
 
 

#include <iostream> #include <algorithm> using namespace std; int p[60000],c[60000]; int find(int x) {return p[x]==x ? x : p[x]=find(p[x]); } int main() {  int t=1,i,x,y; int m,n;   while(cin>>m>>n,m!=0)

 {      for(i=1;i<=m;i++)   {p[i]=i;c[i]=0;}   for(i=1;i<=n;i++)   {  cin>>x>>y;   x=find(x);   y=find(y);   if(x!=y)    p[x]=y;   }   for(i=1;i<=m;i++)   {x=find(i);   c[i]=x;   }   

sort(c,c+m);

  int max=1;         for(int i=2; i<=m; i++)             if(c[i]!=c[i-1])                 max++;    

       cout<<"Case "<<t<<": "<<max<<endl;    t++;  }  return 0; }

转载于:https://www.cnblogs.com/lengxia/p/4387819.html

你可能感兴趣的文章
hdu 5212 : Code【莫比乌斯】
查看>>
Django - - 进阶 - - 同源策略和跨域解决方案
查看>>
Android 之 布局训练
查看>>
js正则函数match、exec、test、search、replace、split使用介绍集合
查看>>
Win10隐藏硬盘分区
查看>>
matlab练习程序(Gabor Filter)
查看>>
【SQL Server】系统学习之三:逻辑查询处理阶段-六段式
查看>>
PHP语言 -- 基础
查看>>
GDataXML的一些简单示例。
查看>>
python day08
查看>>
maven 错误处理
查看>>
viewpage的使用
查看>>
【xamarin + MvvmCross 从零开始】六、模拟器的配置与连接
查看>>
Android 动态生成 EditTest
查看>>
初步学习Spring Aop使用之注解方式
查看>>
触发器与存储过程笔记
查看>>
HotSpotOverview.pdf
查看>>
Visual Studio 2011 Beta 下载
查看>>
《统一沟通-微软-培训》-2-部署-反向代理-5-创建-访问规则-测试
查看>>
linux生产服务器有关网络状态的优化措施
查看>>