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 ...
随机推荐
- 设计模式学习之装饰者模式(Decorator,结构型模式)(16)
参考地址:http://www.cnblogs.com/zhili/p/DecoratorPattern.html 一.定义:装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相 ...
- Jquery自定义扩展方法(二)--HTML日历控件
一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...
- UVA 10828 Back to Kernighan-Ritchie(高斯消元)
高斯消元求概率 对于非起点,期望x[i] = ∑x[j] / deg[j] #include<cstdio> #include<iostream> #include<cs ...
- hdu 5366 组合数 *
考虑放1个,2个....的情况,相加就是最后的结果 #include<cstdio> #include<iostream> #include<algorithm> ...
- [译]:Orchard入门——安装Orchard
原文链接:Installing Orchard 文章内容基于Orchard 1.8版本 安装Orchard的方式 主要有以下四种方式安装Orchard: 利用Microsoft Web Platfor ...
- 基于ZigBee的家居控制系统的设计与应用
基于ZigBee的家居控制系统的设计与应用 PPT简介:http://pan.baidu.com/s/1i38PC6D 摘 要 智能家居是未来家居的发展方向,其利用先进的网络技术.计算机技术和无线通 ...
- hihoCoder 1391 Countries【预处理+排序+优先队列】2016北京网络赛
题目:http://hihocoder.com/problemset/problem/1391 题目大意: A和B两个国家互射导弹,每个国家都有一个防御系统,在防御系统开启的时间内可以将到达本国的导弹 ...
- [Liferay6.2]Liferay Dynamic Query API示例
介绍 Liferay提供了几种方法定义复杂的查询用来检索数据库中的数据. 通常情况下,在每个service Entity中,通过定义一些'finder'方法,可以便捷地满足基本的数据查询操作. 但是, ...
- 2016北京网络赛 hihocoder 1391 Countries 树状数组
Countries 描述 There are two antagonistic countries, country A and country B. They are in a war, and ...
- 使用Hue上传hive数据
大概逻辑是先上传hdfs数据,然后创建hive外部表,关联到hdfs上传数据的位置. 截图比较概要,但是用起来很简单 1.创建路径和上传文件 2.创建外部表