
并查集
cjk_cjk
这个作者很懒,什么都没留下…
展开
-
uva11987 Almost Union-Find(可删除元素的并查集)
【题目大意】给定n个集合:{1},{2},…,{n},要求支持三种操作:"1 p q":若p,q不在同一集合,将它们所在的集合合并成一个"2 p q":若p,q不在同一集合,将元素p移动到q所在的集合"3 p" :询问p所在集合的元素个数及元素和m个询问,1【题解】维护sum[x],cnt[x],表示以x为father的集合的 元素和及元素个数,就可原创 2015-02-20 23:28:18 · 1602 阅读 · 0 评论 -
BZOJ3211 花神游历各国(树状数组+并查集)
【题解】查询很容易做到O(logN)修改时注意:第i位上的数a[i] -> sqrt(a[i]),最多执行30次,当a[i]==1后,可以不修改,直接跳过 跳到之后第一个大于1的位置上去,这个位置可以用并查集维护 由于每个点最被修改30次,修改的总复杂度为O(300*N)注意分析题目中修改操作的性质 注意两个小优化:1. fa[n+1]=n+1原创 2015-06-18 02:35:02 · 594 阅读 · 0 评论 -
[NOI2002]银河英雄传说(并查集)
【题解】建立并查集,并维护每个结点到root的距离、每个连通块中结点的个数sum "M i j"即:将father(i)到root的距离改为 sum[father(y)],将sum[father(y)]增加 sum[father(x)]【代码】#include#include#includeint fa[30005],dis[30005]={0},sum[3000原创 2015-06-29 17:14:41 · 1150 阅读 · 0 评论 -
BZOJ1854 [Scoi2010]游戏(并查集/二分图匹配)
【题解】将一个装备抽象成一条边,它连接着编号为其属性值的两个结点 这样,取装备等价于取边; 每个装备只能用一次,等价于在每条边上仅能取一个端点 因此,连好所有的边,构成一个个连通块,它们产生了这样一条性质:对于某一连通块,若其为一棵树,则它的所有结点(属性值)中,只有一个不能取。(因为树的边比点少一,每条边上只能取一个点)原创 2015-06-28 23:30:49 · 805 阅读 · 0 评论 -
BZOJ1202 [HNOI2005]狡猾的商人(并查集)
【题解】给出[l,r]的区间和,相当于s[r]-s[l](前缀和思想)一旦已经知道了 s[a]-s[b],s[b]-s[c],再给出一条[a,c]就可以判断"账本的真假"了 将每条这样的信息(l,r,w),l,r放入一个集合中,用并查集来维护,并维护cha[l]=s[root]-s[l],cha[r]=s[root]-s[r]若 l,r已经在同一个集合中,就直接查询cha[l]原创 2015-06-29 13:45:47 · 2322 阅读 · 0 评论 -
BZOJ1018 [SHOI2008]堵塞的交通traffic(分块+并查集)
这份题解没有在BZOJ上AC(狂汗不止),不过我觉得分块的思想挺不错的,就尝试了一下不过相似的代码可以AC这道题LA 4082 Traffic Jam如图,先给点编号,然后每一块中暴力维护并查集:Open:在同一块中就维护并查集,在不同块互相连通就用一个link数组记录Close:在同一块中就把块中元素的fa[]全部重新计算,在不同块中直接把link赋零Ask:判断原创 2015-02-04 18:24:45 · 1648 阅读 · 4 评论