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的简化版
解题思路一样
代码如下: