HDU - The Suspects
Description
Input
Output
Sample Input
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 5
5 1 2 3 4 5
1 0
0 0
Sample Output
4
1
1 这道题算是我的第一道开始接触并查集类型的题目,我觉得很有纪念意义,虽然搞懂并查集之后比较容易,不过我还是要贴一下代码,毕竟纪念嘛。 一开始我面对这倒题目也是一脸懵比的,因为还不清楚到底怎么写出并查集来,不过在经过菊花哥打通任督二脉之后连下六题倒是很爽,嘻嘻 至于并查集是什么不懂先去百度一下吧,我这里主要还是根据我自己的理解写一点笔记 并查集中用数组来表示集合,本节点储存的是父节点的信息,在查找的时候类似于链表,一路向上查找直到代表一个集合的那个节点,所谓路径压缩, 就是在查找那个集合代表的时候中途也把路过的节点全部指向集合标志节点,要理解这一个递归就好办事了
int FindRoot(int root) {
return road[root] = root ? root : (road[root] = FindRoot(root));
}
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std; const int MX = 33333;
int node[MX];
int num[MX];
int in[MX];
int n, m; void ini() {
for (int i = 0; i < n; i++) {//初始化的时候,因为每一个节点的父节点都是自己本身(规定这样的,嗯,记住就好,以后用多的时候自然就懂了)
num[i] = 1;//这个数组用来记录集合代表节点所包含的元素,当然也包括自己本身,所以初始化为1
node[i] = i;
}
} int FindRoot(int k) {
return node[k] == k ? k : (node[k] = FindRoot(node[k]));
} int main() {
//freopen("input.txt", "r", stdin);
while (scanf("%d %d", &n, &m), n || m) {
ini();
while (m--) {
int t;
scanf("%d", &t);
for (int i = 0; i < t; i++) {
scanf("%d", &in[i]);
if (i == 0) continue;
else {
int root1 = FindRoot(in[i - 1]);
int root2 = FindRoot(in[i]);
if (root1 != root2) {
node[root2] = root1;
num[root1] += num[root2];//合并的时候别忘了把元素个数算上
}
}
}
}
printf("%d\n", num[FindRoot(0)]);//这里要特别注意,因为0的跟节点可能不是0,所以不能直接输num【0】,要更新一遍
}
return 0;
}
HDU - The Suspects的更多相关文章
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- hdu图论题目分类
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDU图论题单
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
随机推荐
- php建立多层目录的函数
/** *根据路径path建立多级目录 *$dir目标目录 $mode权限,0700表示最高权限 */ function makedir( $dir , $mode = "0700" ...
- 图结构练习——最小生成树(prim算法(普里姆))
图结构练习——最小生成树 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 有n个城市,其中有些城市之间可以修建公路,修建不同 ...
- Java程序员要求具备的10项技能
1.语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:a ...
- 恢复 git reset -hard 的误操作
有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支,我都担心数据丢失. 不 久之前,我在做一些大动作(re ...
- 攻城狮在路上(叁)Linux(十六)--- 命令与文件的查找
一.脚本文件的查询: 1.命令格式:which [-a] command; <==通过PATH来查找. -a:列出所有的,而不是仅列出第一个. 示例: which ifconfig; 注意:由于 ...
- android 入门-微博分享
[2015-03-11 13:40:32 - WeiboSDK] Unable to resolve target 'android-8' 修改project.properties target=a ...
- Win7系统怎么开启远程桌面?Win7远程桌面怎么用(转)
远程桌面服务开启之后,可以方便的远程管理服务器或计算机.为生活和工作带来不少便利呢,很多小伙伴还不知道怎么开启win7远程桌面吧(下面咗嚛以内网远程桌面为例) 工具/原料 Win7 Win7远程桌 ...
- wpf template的code写法
this.Template = XamlReader.Load ("<ControlTemplate xmlns='http://schemas.microsoft.com/clien ...
- 【项目经验】——JSON.parse() && JSON.stringify()
我们在做项目的时候,都知道序列化和反序列化,师哥说:"有正就有反,有来就有回!"的确,就是这样.然后我们在这里分享一下JSON.stringify() 和JSON.parse() ...
- 【Tomcat 系统服务】将tomcat设置为系统服务,并且开机自启 + 卸载tomcat服务
1.首先 你得下载一个tomcat[一般都是解压版的,解压放在那里就能用] startup.bat shutdown.bat service.bat等文件都在tomcat的bin目录下 ,例如 ...