并查集
DOFYPXY
这个作者很懒,什么都没留下…
展开
-
[BZOJ2303][APIO2011]方格染色 异或+并查集
这题首先要推式子: 题目条件即为A(i-1,j-1) xor A(i-1,j) xor A(i,j-1) xor A (i,j)=1. 又有A(i-1,j-2) xor A(i-1,j-1) xor A(i,j-2) xor A(i,j-1)=1. 相邻两列两式异或得A(i-1,j-2)xor A(i,j-2) xor A(i-1,j) xor A(i,j)=0. 就这样一直递推过去,原创 2017-04-25 09:02:22 · 657 阅读 · 0 评论 -
[BZOJ1455]罗马游戏 左偏树+并查集
左偏树用来合并堆,并查集用来维护所在堆的堆顶编号。 然而有的时候要删除堆顶x,然后对并查集进行这样的操作:fa[x]:=merge(x^.l,x^.r); fa[fa[x]]:=fa[x]。这样就给并查集换了个根。 注意被杀了的点不要真正扔出堆,要不然会影响并查集的getfa,打一个kill标记不管它就是了。 代码:type heap=^heapnode; heapnode=recor原创 2017-04-27 07:48:50 · 354 阅读 · 0 评论 -
[BZOJ4569][SCOI2016]萌萌哒 并查集+倍增
一开始想偏了,一直在想线段树上搞个并查集。其实线段树的分段方式不灵活,需要应用ST表式(倍增式)的分段方式。 考虑维护log\log个并查集。因为每个区间都可以被分成两个长度为2k2^k的区间,于是在第kk个并查集中合并。合并第kk个并查集中的xx和yy,意义是[x,x+2k−1][x,x+2^k-1]和[y,y+2k−1][y,y+2^k-1]两个等长的区间相对应的元素两两合并,就像打了标记。原创 2018-01-11 22:04:36 · 266 阅读 · 0 评论 -
[BZOJ2959]长跑 LCT+双联通分量+并查集
首先在一个边双联通分量中所有点的贡献是都可以算入的。但是因为有加边操作,考虑用LCT来维护缩边双之后的树。 若一次连接的(x,y)(x,y)在同一棵树上,就把xx到yy的路径提出来,缩成一个点。这可能会导致其他某些点的父亲标号改变,所以调用父亲之前一定要用并查集更新一下。 然后因为只有加边,判断在不在一棵树上最好也用并查集,用找根操作常数略大。 代码:#include#includ原创 2018-01-18 20:21:11 · 366 阅读 · 0 评论 -
[GDOI2014]beyond 扩展KMP+并查集
题目等价于求给定两个长度都为nnn的串A,BA,BA,B,求一个最大的LLL使得A1..LA1..LA_{1..L}与B1..LB1..LB_{1..L}循环同构。 我们先对A,BA,BA,B互相做一遍扩展KMP,记Ai..nAi..nA_{i..n}与BBB的LCP为exaiexaiexa_i,exbexbexb同理。 循环同构一定是存在xxx,使得A1..x=BL−x+1..L ...原创 2018-04-25 15:56:29 · 302 阅读 · 0 评论 -
[JZOJ5739]毒奶 子集DP
这里讲的是O(3n⋅n)O(3n⋅n)O(3^n\cdot n)的可以过的暴力,正解不会。。。 把问题转化成给了nnn个白点,nnn个黑点,给定了n−1n−1n-1条白白边和黑黑边,求再填nnn条黑白边使之联通的方案数。 先用给定的边缩点,记下缩点后每个大点的sizesizesize,然后随意钦定一个白点当根,剩下就是要求一层黑一层白的填,直接子集DP即可。 具体地,设FS,c,iFS,c,...原创 2018-05-24 09:44:45 · 497 阅读 · 0 评论