Ubiquitous Religions
描述
当今世界上有太多不同的宗教,很难一一掌握。您有兴趣找出您大学中有多少不同宗教信仰的学生。
您知道您的大学中有n个学生(0 <n <= 50000)。向每个学生询问他们的宗教信仰是不可行的。此外,许多学生不愿意表达自己的信念。避免这些问题的一种方法是,问m(0 <= m <= n(n-1)/ 2)对学生,并询问他们是否信仰同一宗教(例如,他们可能知道他们是否都参加同一宗教)教会)。从这些数据中,您可能不知道每个人的信仰,但是您可以对校园中可以代表多少种不同宗教的上限有所了解。您可以假设每个学生最多订阅一种宗教。
您知道您的大学中有n个学生(0 <n <= 50000)。向每个学生询问他们的宗教信仰是不可行的。此外,许多学生不愿意表达自己的信念。避免这些问题的一种方法是,问m(0 <= m <= n(n-1)/ 2)对学生,并询问他们是否信仰同一宗教(例如,他们可能知道他们是否都参加同一宗教)教会)。从这些数据中,您可能不知道每个人的信仰,但是您可以对校园中可以代表多少种不同宗教的上限有所了解。您可以假设每个学生最多订阅一种宗教。
输入项
输入包含多种情况。每种情况都以指定整数n和m的行开头。接下来的m行分别由两个整数i和j组成,指定学生i和j信仰相同的宗教。学生从1到n编号。输入的结尾由其中n = m = 0的行指定。
输出量
对于每个测试用例,请在一行上打印例号(以1开头),然后打印大学学生所信奉的不同宗教的最大数量。
样本输入
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
样本输出
情况1:1 Case 2: 7
题意:学校有n个同学,每个同学有且只有一个信仰,给出m对有同一信仰的同学,问存在多少种不同的信仰?
输入0 0时结束程序。
代码
#include<iostream>
using namespace std;
const int max_size=100;
int pre[max_size],height[max_size];
void init_set(int count){
for (int i = 1; i <= count; i++)
{
pre[i]=i;
height[i]=0;
}
}
int find_set(int x){
if (x!=pre[x])
{
pre[x]=find_set(pre[x]);
}
return pre[x];
}
void union_set(int x,int y){
x=find_set(x);
y=find_set(y);
if (height[x]==height[y])
{
height[x]=height[x]+1;
pre[y]=x;
}else
{
if (height[x]<height[y])
pre[x]=y;
else
pre[y]=x;
}
}
int main(){
int n,m,x,y;
while((cin>>n)&&n){
cin>>m;
init_set(n);
for (int i = 1; i <= m; i++)
{
cin>>x>>y;
union_set(x,y);
}
int ans=0;
for (int i = 1; i <= n; i++)
{
if (pre[i]==i)
{
ans++;
}
}
cout<<ans<<endl;
}
}
因上求缘,果上努力~~~~ 作者:别关注我了,私信我吧,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13674008.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY