POJ 1182 1703 并查集的应用

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的简化版

解题思路一样

代码如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值