POJ 1182 1703 并查集的应用

来源:互联网 发布:linux日志收集 编辑:程序博客网 时间:2024/06/06 01:44

1182

今天接触了并查集,并查集在数据结构上很简单,虽说是树(二叉树都怕,更别说是树了),但是它是有根节点表示法来表示的,可以用数组模拟,相当的简单。但是用处有很大。

并查集主要用于这样的问题,问题中有大量数据,数据之间有简单的关系,而这种关系又带有简单的传递性。

如果按照矩阵的方式表示数据间的关系,即用d[i][j]表示i和j之间的关系,空间复杂度O(n^2)显然无法承受,这时就用到了并查集。

并查集的空间复杂度为O(n)。

并查集提供三个操作:

1。初始化

2。查找结点所在集合

3。合并两个集合

并查集以森林的形式存在,每个森里都代表一个集合,集合中的结点间存在某种关系,集合是由根节点进行标示的,即判断两个节点是否在一个集合里,只需看两节点所在集合的根结点是否相同即可。

理解尚浅,待多做几道并查集的题后,再来总结吧。

本题代码如下,注释很详细:

 

另外,本题cin的话会TLE,而scanf就可以AC,让我见识了scanf和cin的差距,也是第一次遇见输入量这么大的题 100000个输入

 

这个解题报告很好:

 

http://www.cppblog.com/tortoisewu/archive/2009/07/14/85501.html

 

 

1703是1182的简化版

解题思路一样

代码如下: