
并查集
文章平均质量分 81
qian99
这个作者很懒,什么都没留下…
展开
-
UVA 11987 Almost Union-Find
并查集可以做,只不过需要些技巧,昨天写了一下,发现有些问题,合并的话还是比较简单的,直接将他们所在集合的各个值合并即可,但是将p移动的时候就有问题了,当parents[p]不等于p的时候没有什么问题,但是p如果等于parents[p]就有问题了,如果将p移走,那么查找parents[q]=p的节点就会出现问题。我想了很久,没想到什么好办法,今天问了问其他少侠,得到一个不错的思路,就是为每个点设置一原创 2013-06-13 20:53:50 · 737 阅读 · 0 评论 -
zoj 3641 Information Sharing(并查集)
题意:给出n个操作,操作有的三种:①添加一个人,这个人携带了一些信息。②分享某两个人的信息。③查询某个人所拥有的不同的信息的个数。思路:其实就是个并查集,用个set来记录每个人所拥有的信息,当两个人分享信息时,将这两个人合并,把一个人的信息都添加到另一个人上面,然后把这个拥有的信息删除。代码:#include#include#include#include#incl原创 2014-03-19 18:49:35 · 867 阅读 · 0 评论 -
SGU 177 Square(并查集)
题意:给出一个n×n的矩阵,矩阵上每个格子最开始都是白色的,给出m个操作,每个操作会把一个矩形染成黑色或白色,问最后有多少个白的格子。思路:这题让我不禁想起了poj 2528,这类的染色问题应该都能用并查集搞……从后往前处理操作,这样已经画过的地方就不会第二次被染色,然后把染过的标记一下,接下来就是用并查集把染过的“跳过去”就好了,在这个过程中统计一下染过的黑色格子的数量,用总量一减就OK了~原创 2013-12-06 19:06:02 · 1036 阅读 · 0 评论 -
hdu 4424 Conquer a New Region(并查集)
题意:给出一棵树,每条边有一个容量,求一个中心点,让这个点到其他点的最大流量的和最大。思路:开始还在想是不是树形dp,唉,我还是太弱了……首先把边排个序,然后一条边一条边合并,假如我们已经算出了要添加的边所连的两个子树的最大流量和,由于边是从大到小添加的,当前边的容量一定是一个树中的点到另一个树的最大流量,那么两个子树合并后的最大流量和就是某一个子树的最大流量和+另一个子树中的点的个数×当前边原创 2013-10-21 12:27:16 · 963 阅读 · 0 评论 -
hdu 4056 Draw a Mess(并查集)
题意:给出n*m的矩阵,每次会用某一种颜色在上面画四种图形(圆、菱形、矩形、三角形),先画的会把后画的覆盖掉,问最后每种颜色占的格的数量。思路:这个覆盖问题可以用并查集搞,先对于某一行或列来说,先从最后的图形画,因为这个图形不会被前面覆盖,对于这个图形画的区间[l,r]来说,它能画上的就是之前没有画到的地方,用并查集从最右面的点开始扫,如果该点没有被覆盖,那么就覆盖它,然后把这个点和l所在集合原创 2013-10-25 16:12:44 · 1046 阅读 · 0 评论 -
hdu 4756 & hdu 4126 & hdu 4081
hdu 4756是南京网赛的题,这题和2011年福州现场赛的一道题,也就是hdu4126很像,比赛前十几天明明做过的说,结果比赛的时候没看到这题,唉。今天一不小心又翻到了一个和这两题也很像的题——hdu 4081,还是2011北京现场赛的题,晕了,既然这样就直接都放在一起算了。 这三个题思路都差不多,问题都是先要求一个最小生成树,然后删掉一条边,询问剩下的最小生成树的情况(原创 2013-09-24 18:23:49 · 1230 阅读 · 0 评论 -
poj 1417 True Liars
题意:有p1个好人,有p2个坏人,给出n个信息,每个信息表示编号为x的人和编号为y的人是否为同一集合,问是否能唯一确定p1中有哪些人。思路:首先要做一个并查集,用rt[i]记录i与根节点的关系,0表示与根节点属于同一集合,1表示与根节点所在集合不同,这样把所有信息处理完以后,会得到若干个集合,每个集合中只能获得不同集合的人数,但是不能知道某个集合是否是好人。这样的话还要做一个dp,用dp[i]原创 2013-10-05 19:58:31 · 1187 阅读 · 0 评论 -
poj 1456 Supermarket
题意:给出一些商品的清单,清单上有每个商品能获得的利润和可以出售的最后期限,卖一件商品的恰好需要一天,问能获得的最大利润是多少。感觉每次读题都好痛苦啊。。。思路:其实是蛮简单的贪心,感觉挺好玩就写发题解吧……可以想到,想要让利润最大就要让价值最大的产品尽可能多的卖出去,那么就要按照利润排个序,然后给每个产品安排一个合理的时间,所谓合理,也就是说在保证该产品能卖出的条件下,尽可能让其他产品也能卖原创 2013-10-07 12:50:12 · 798 阅读 · 0 评论 -
UVALive 3644 X-Plosives
赤裸裸的并查集。。。。 代码: #include #include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi a原创 2013-06-06 22:36:38 · 1041 阅读 · 0 评论 -
UVALive 3027 Corporative Network
题意:有n个结点、两个操作。第一个操作是将结点u的父结点设置为v(距离为|u-v|%1000),第二个操作是询问u到根结点的距离。思路:并查集。用一个额外的数组储存当前结点到父结点的距离,不加路径优化2000多ms过了,速度慢了点,加优化的话就要维护数组了,应该速度会提升很多。 代码: #include #include#include#include#include原创 2013-06-06 22:42:59 · 916 阅读 · 0 评论 -
hdu 2473 Junk-Mail Filter(并查集)
题意:给出n个点,有两个操作,一个是把两个点合并,另一个是把某个点移出集合,求所有操作进行后集合的个数。思路:这题前几天FOJ月赛的时候看到过,原来是08年Regional的题。。。合并好说,把结点移出集合就有些麻烦了,因为这个结点可能是其它点的父节点,为了不出现这种问题,可以设一个虚拟结点,把所有点连到虚拟结点上,这样移除的时候就不用考虑那么多了。需要注意的是本来就是单独的结点不需要移出,一原创 2014-03-24 20:51:50 · 893 阅读 · 0 评论