并查集
蜗角虚名羊
这个作者很懒,什么都没留下…
展开
-
bzoj1594: [Usaco2008 Jan]猜数游戏
题目题解首先考虑如何判定是否有不合法的,我们把这些区间信息按照v从大到小排序,按顺序做,每次相当于在区间中找一个位置,填下这个v,还要满足这个v不能填在已经做过的区间中(否则那些区间的最小值就是这次的v了,显然小于了本来应该是的v),那么我们就每次判断是否能填后,用一条线段覆盖本次区间,表示这个区间不能填比我小的了。v相等的若干区间怎么办呢?我们求出这些区间的交,如果交为空,则显然不可能,否则...转载 2018-10-08 22:08:30 · 210 阅读 · 0 评论 -
洛谷P2024 [NOI2001]食物链
题目种类并查集#include<bits/stdc++.h>using namespace std;int op,x,y,n,m,i,v[150003],ans;int find(int x){ return v[x]==x?x:v[x]=find(v[x]);}int main(){ cin>>n>>m; for (i=1...原创 2018-12-11 14:26:00 · 160 阅读 · 1 评论 -
poj1456 Supermarket
题目每次尽可能选大的,不知道怎么证正确性,但感觉是对的#include<cstdio>#include<algorithm>using namespace std;const int N=10002;int n,i,pos,fa[N],ans;struct node{ int x,y;}a[N];int find(int x){ return x==f...原创 2018-12-11 16:11:29 · 150 阅读 · 0 评论 -
bzoj3674: 可持久化并查集加强版
题目#include<bits/stdc++.h>using namespace std;#define mid ((l+r)>>1)const int N=200002,M=10000002;int rt[N],cnt,L[M],R[M],dep[M],n,m,opt,x,rx,ry,las,v[M],y,i;inline char gc(){ static...原创 2018-12-11 08:58:18 · 200 阅读 · 0 评论 -
bzoj2342: [Shoi2011]双倍回文
题目题解首先我可以看出:(1)我们找到的串的本身也是一个回文串(显然)(2)这个回文串的长度一定是偶数(显然)(3)左右两个串一定也是偶数长度的回文串(显然)那么我们先用manacher处理出以每个字符为中心的回文串长度由于我们所需处理的这些串的长度都为偶数,所以这些串的中心都在manacher时的那些填充字符上(显然)那么我们就先枚举大串的中心i,设左边小串的中心为j那么j+r...转载 2018-12-21 11:15:20 · 127 阅读 · 0 评论 -
bzoj3211: 花神游历各国
题目树状数组+并查集#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=100002;int n,i,v[N],fa[N],m,opt,l,r,tmp;ll tr[N];inline char gc(){ static char buf[100000],*p1=buf,...原创 2018-12-10 15:34:55 · 101 阅读 · 0 评论 -
bzoj1453: [Wc]Dface双面棋盘
题目并查集中的1..n1..n1..n表示上方,n+1..2nn+1..2nn+1..2n表示下方,合并时2n+1..4n2n+1..4n2n+1..4n用于右侧的上下方并查集#include<bits/stdc++.h>using namespace std;const int N=502;#define mid (l+r>>1)int mp[N<<...原创 2018-12-15 14:45:43 · 160 阅读 · 0 评论 -
hdu2473 Junk-Mail Filter(并查集,造假点)
题目题意:mmm个操作,每个操作可以把x,yx,yx,y合并再一个集合,也可以把xxx从它当前集合中删去,成为孤立的点,求最后的不同集合数量Solution如果真要从并查集里删一个数,那肯定是很麻烦的,而且我也不会,但是可以把xxx留着,以后不再调用xxx,把之后的调用xxx都改成调用yyy,其实就相当于删掉了xxxCode#include<bits/stdc++.h>us...原创 2018-12-12 15:19:52 · 230 阅读 · 0 评论 -
AT2377 Blue and Red Tree
题目题解Solution首先可以发现最终状态替换的红边和蓝边一定是重边。把这条边两端的联通块看成一个点。往回推,要形成这两个点,必须也要有类似的重边这样就可以得到一种做法。每次把重边两端的放入队列,并把边集合并(启发式合并),把这两个联通块合并再把重边放入,直至更新完成Code#include<bits/stdc++.h>using namespace std;#d...转载 2018-10-30 12:29:44 · 185 阅读 · 0 评论 -
bzoj1202: [HNOI2005]狡猾的商人(带权并查集)
题目Codefa[x]fa[x]fa[x]表示xxx路径压缩后的父亲d[x]d[x]d[x]表示xxx到fa[x]fa[x]fa[x]的距离(有向,fa[x]fa[x]fa[x]到xxx的距离为−d[x]-d[x]−d[x])#include<bits/stdc++.h>using namespace std;const int N=102;int n,m,x,y,z,i...原创 2019-03-13 20:01:11 · 113 阅读 · 0 评论