并查集
文章平均质量分 82
johsnows
正在静下心来学算法的acmer
展开
-
cf 766 d Mahmoud and a Dictionary(带权并查集)
题意:给一些单词,它们可能是同义或者反义,给出一些关系定义,从前面的定义开始建立关系,如果有的关系定义和之前的冲突输出NO,否则输出YES。然后查询q次单词x和单词y的关系。解题思路:很明显就是带权并查集,但是我不太会用,去网上找了食物链的代码,改了下代码,但是每改公式,强行把关系差为2和3的都当做反义关系,结果错了。结束后去学习了下带权并查集,然后直接把公式改了改就过了,发现原创 2017-02-08 10:34:19 · 335 阅读 · 0 评论 -
poj 1703 Find them, Catch them(并查集)
题意:城市里有两帮犯罪团队,给你m条信息,D x y表示x和y不是同一帮,A x y是查询x和y的关系。解题思路:用带权并查集可以很好的解决这个问题,定义ran[i]为i与祖先节点的关系,0表示同帮,1表示不同帮。查询的时候如果两个点不在一棵树上,说明有节点的信息还没有给出过,那么不能确定两者之间关系,如果在同一棵树上而ran[x]==ran[y],那么说明他们是同帮,反之不同原创 2017-02-10 09:36:43 · 215 阅读 · 0 评论 -
poj 2492 A Bug's Life(并查集)
题意:有两种性别的bug,研究发现他们每个bug只和不同性别的人交流,给出一些bug之间交流记录,问这个研究是否正确解题思路:定义ran[i]记录i与祖先的关系,用带权并查集来存储bug之间的关系。如果交流记录里出现有两个bug在同一棵树上了,而且他们还是同一个性别,那么说明研究不正确,如果没有这样的两个bug,那么说明研究正确。代码:#include #in原创 2017-02-10 10:11:04 · 457 阅读 · 0 评论 -
ural 1003. Parity(并查集)
题意:有一个01序列,现在有n个声明,每个问题,每个问题包含两个数字l,r,已经一个字符串表示odd和even,问题的含义是让这个序列l到r之间的1的个数为even和odd,现在问你能构造出一个序列最多满足前多少个问题。解题思路:这道题的转换还是有点巧妙的。假装这里有一个01序列,要知道l,r内有多少个1的话,最好的办法就是先预处理一个前缀和,查询一下也就可以,因为是问是奇原创 2017-06-09 11:39:44 · 505 阅读 · 0 评论 -
bzoj 2049: [Sdoi2008]Cave 洞穴勘测 (时间分治+带撤销并查集)
可加边删边,询问两个点连通性的一个题。好像可以lct。但是跟着金桔学了时间分治+带撤销并查集的做法,第一次写时间分治。时间分治的话就是以操作序号为时间,对应对一颗线段树上去,然后在线段树上分治找到操作时间对应的节点,进行操作。对于一条边,它存活的时间就是【加边的时间,删边的时间】这样一个区间,然后我们这条边pushdown到线段树上去,分散的存在各个节点,注原创 2017-06-16 10:57:43 · 1042 阅读 · 0 评论 -
codeforces 811 E Vladik and Entertaining Flags(线段树+并查集)
题意:n*m的矩形,每个格子上有一个数字代表颜色,有q次询问,问(1,l),(n,r)这两个点对应的矩形的连通块有多少个。1解题思路 :这题最麻烦的就是写合并了,然后也是让我对并查集又重新认识了一下。。只要往线段树那个方向想了,想到每个区间维护左右两个列应该不难,然后再想一想这个题目要求连通块个数,那么应该也能想到左右两个列应该是并查集。然后需要注意的是L(原创 2017-05-31 20:54:56 · 876 阅读 · 2 评论