
并查集
文章平均质量分 64
nlj1999
这个作者很懒,什么都没留下…
展开
-
1050: [HAOI2006]旅行comf
枚举大法好。先对边进行排序,然后枚举最大边,初始化并查集,依次加入更小的边,第一次连通时,更新答案,一轮枚举结束。#include#include#include#includeusing namespace std;const int inf=1e9;struct Edge{ int u,v,w; bool operator<(const Edge& rhs)const{原创 2015-12-09 18:33:59 · 423 阅读 · 0 评论 -
HNOI 2016 D2T1 序列 (sequence)
http://yuxj173.github.io/2016/04/18/hnoi2016/#more考场上唯一想出来的题,结果TM莫队写错了。。。不过题解似乎有更神的莫队做法(优化过的莫队?)不过块似乎分得有点问题,2S左右出解#include#include#include#include#includeusing namespace std;const int in原创 2016-04-18 15:55:40 · 779 阅读 · 0 评论 -
BZOJ 1202: [HNOI2005]狡猾的商人
题目显然是判断若干个不等式是否都成立差分约束。直接用SPFA搞。不过复杂度不好说。但是我们可以换个数据结构用带权并查集维护每个节点到父节点的路径长度。长度的意义是sum[u]-sum[fa[u]],于是若同根则可以算出两节点长度,与当前信息比较判断。不同根就合并,维护长度。#include#include#includeusing namespace std;con原创 2016-03-27 17:03:24 · 477 阅读 · 0 评论 -
codevs3044 矩形面积求并
由于05年的那道论文里的题我找不到(懒得找)然后拿这题代替了一下,验证我算法的正确性首先这题线段树是最优解就不用说了。然后论文里有个坑爹题,把矩形染上颜色然后求每种颜色的面积。这个时候线段树就要n^2*logn的复杂度啦而下面这种方法依旧是n^2(然而我并没有找到那道题)#include#include#include#includeusing namespace原创 2016-03-09 16:57:40 · 429 阅读 · 0 评论 -
poj 3483 Loan Scheduling
接着上一题的例题。带权区间,区间长度为1,每个点可被覆盖l次,区间右端点不能超过di。由于区间长度的特殊性,可以用并查集维护(不然只能用线段树了)记录每个点的测度,当测度=l时将该点与该点该点前面的点合并。于是用并查集维护点的集合,代表元取编号最小的点。每次加区间的时候将区间覆盖到di所在集合的代表元上,然后按上述维护。#include#include#include原创 2016-03-20 13:05:12 · 570 阅读 · 0 评论 -
BZOJ 1998: [Hnoi2010]Fsk物品调度
很作死地写了个高端(SB)的并查集首先只要求出所有的posi,剩下的很容易用置换群的理论得出答案然后看posi的求法对于固定的a,da+b*d(modn)通过b不断地累加会构成环于是查找的时候只要找环上xi最小的点。但是有的时候会把一个环用完于是我们把环上的每个点都连到相应的下一个环上然后我很脑残地写了个并查集,维护环与环之间的路径和环内的路径每次查找的时候原创 2016-03-31 21:41:28 · 673 阅读 · 0 评论 -
BZOJ 1997: [Hnoi2010]Planar
07年的论文里有关于平面图判定的但是那个代码好像要300多行(听说12年WC的时候clj写出来了%%%%%%%%%%%)不过既然存在哈密尔顿回路,那么当然要用特殊的做法啦首先把哈密尔顿圈画出来然后不在圈上的边要么在圈内要么在圈外如果有两条边在圈内相交了,那么他们肯定是一个在圈内一个在圈外所以是个2-SAT问题(直接套Tarjan就好了)然后因为我比较懒就写了个并查集水一原创 2016-03-31 16:18:55 · 819 阅读 · 1 评论 -
POJ 1703 Find them, Catch them
又是没学过的。。。。。。。种类并查集其实就是维护每个点到当前集的根节点的距离的奇偶性。距离为奇代表和根不同种类,为偶代表和根同种类。find和merge的时候维护一下就好了。但是我觉得这题有离线做法啊………………先把图建出来,然后黑白染色,再跑一遍,用并查集维护连通性,两点不连通就是not sure,连通就用颜色判断一下。结果WA掉了,不知为何。唉……#include原创 2016-02-16 09:26:38 · 275 阅读 · 0 评论 -
POJ 1733 Parity game
02年的论文题,各种优化最后搞个种类并查集。说实话原论文里的实现并不是很会。。。。不知道那个并查集要怎么搞。于是琢磨了一小下终于弄通了种类并查集是怎么回事了。这题由于存在一个same合并,即合并为同一类,所以要在原有的merge上做个判断,不妨将集合看成无根树,于是当u和v合并时若两者不同类,则dis(x,y)=dis(x,u)+dis(v,y)+1,若两者同类,则将节点u和节点v重合原创 2016-03-02 17:59:49 · 347 阅读 · 0 评论 -
BZOJ 4537: [Hnoi2016]最小公倍数
http://www.cnblogs.com/clrs97/p/5406018.htmlClaris好劲啊#include#include#include#include#includeusing namespace std;const int N=100000+5;#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,原创 2016-04-19 16:09:56 · 745 阅读 · 0 评论