poj 2542 题解
来源:互联网 发布:语音视频聊天软件 编辑:程序博客网 时间:2024/05/17 22:15
题意:
一个校园内的所有学生都有宗教信仰,现在要做一个调查,你不能直接问每一个学生,但是可以通过询问他的朋友是否和他的宗教信仰一样,最后需要统计出这个校园内有多少不同的宗教信仰。
输入有多组测试数据,每组开头是两个数,n和m,分别表示学校有n名学生和m组询问。后面是m行询问。最后当n和m都为0的时候停止。
思路:
很明显的并查集问题。将一样的宗教信仰的集合合并,最后写一个for循环统计还有多少不同的信仰即可。
注意:
每一个人都有宗教信仰,也就是说某一个编号没有在m组询问中出现,不要忽略它,他也是一个信仰
#include <iostream>#include <stdio.h>using namespace std;#define MAXN 50010int par[MAXN]; //par[x]表示x的父节点int n;void Init() //初始化{ int i; for(i=1;i<=n;i++) par[i] = i;}int Find(int x) //查询x的根节点并路径压缩{ if(par[x]!=x) par[x] = Find(par[x]); return par[x];}void Union(int x,int y) //合并x和y所在集合{ par[Find(x)] = Find(y);}int main(){ int m,x,y,i,Case=1; while(scanf("%d%d",&n,&m)!=EOF){ if(n==0 && m==0) break; //初始化 Init(); //m次询问 while(m--){ scanf("%d%d",&x,&y); Union(x,y); } int ans = n; for(i=1;i<=n;i++) //统计 if(par[i]!=i) --ans; printf("Case %d: %d\n",Case++,ans); } return 0;}
虽然自己很菜 但是还是要爬着前行
阅读全文
0 0
- poj 2542 题解
- POJ 1011 题解
- poj-1050 题解
- poj-1088题解
- poj-1159题解
- POJ 1009题解
- POJ 1458题解
- Poj 2352 Stars 题解
- POJ 2739题解---小菜
- POJ 1753题解
- POJ 1328题解
- POJ 2049题解
- poj 2679题解
- poj 1149题解
- poj 2790迷宫题解
- POJ - Counterfeit Dollar 题解
- poj 2318 TOY题解
- POJ 1026 Cipher 题解
- 知识学习——Hadoop InputFormat
- freemarker自定义指令(七)
- Java学习第四周(1)--面向对象的多态性
- python 判断列表中每个元素有几个
- (十六)Map
- poj 2542 题解
- 【tensorflow】在不同层上设置不同的学习率,fine-tuning
- 无穷小微积分与考研实践
- ASP ViewState对象,完成客户端状态保持
- 林轩田之机器学习课程笔记(why can machines learn之training versus testing)(32之5)
- HTML textarea value赋值
- 设计思想学习—建造者模式
- 把obj,mtl格式导入Blender,修改,然后导出为COLLADA(.dae),写urdf,最后导入Gazebo
- 孤儿进程/僵尸进程