并查集
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[平面图 并查集] BZOJ 4423 [AMPPZ2013]Bytehattan
平面图转化为对偶图,然后就会有些奇怪的性质可以利用并查集维护#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin)原创 2016-03-30 17:47:18 · 640 阅读 · 0 评论 -
[CDQ分治 并查集 || 随机化权值Xor] BZOJ 3237 [Ahoi2013]连通图
考虑CDQ分治 把这半边对后半边没有影响的操作做了 然后分治用并查集维护 开个栈暴力还原#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,s原创 2016-05-08 12:56:31 · 911 阅读 · 0 评论 -
[并查集] BZOJ 2919 [Poi1998]Word equations
所有的相同字母(包括0,1)的对应位置取值相等并且方程左右的对应位置取值相等,相等关系具有传递性,故我们使用并查集,每个位置作为一个元素,将所有取值要求相等的位置所对应的集合合并,那么有以下几种情况:1. 左右长度不等,ans=02. 1与0被合并至一个集合,ans=03. 设k=不包含1与0的集合的个数,ans=2^k#include#include#inclu原创 2016-12-17 11:28:45 · 487 阅读 · 0 评论 -
[双连通分量 缩点 并查集] POJ 3177 Redundant Paths & 3352 Road Construction
双连通分量缩点 并查集 竟然是第一次打缩点后是一棵树结论是(叶子节点+1)>>1 也就是每次取lca最浅的两个叶子连边#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf原创 2016-10-28 08:20:59 · 401 阅读 · 0 评论 -
[LCT维护最小生成树 || CDQ分治 || 线段树 并查集 dfs树] Codeforces 603E #334 (Div. 1) E. Pastoral Oddities
这是个好题啊 这种数据结构题和dfs树有什么关系呢 唯一的关系就是一个联通块当且仅当有偶数个点时能满足存在边集的一个子集每个点度数为奇数或者更一般的结论 当一个联通块中每个点的度数奇偶性要求之和是偶数 那么存在然后我们就转化为一些边使得每个联通块为偶数这个出题人的标算我没看懂啊 LCT在线维护最小生成树?http://codeforces.com/blog/entry/21原创 2017-01-04 16:45:31 · 1334 阅读 · 0 评论 -
[欧拉回路 并查集] Codeforces 547D #305 (Div. 1) D. Mike and Fish
这个题建图不难想 建成一个二分图 左边表示x右边表示y 然后在xy之间连边 奇点我们用一个额外点都连起来 然后就是找欧拉回路 用并查集 不然后T#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==原创 2017-01-08 09:37:05 · 485 阅读 · 0 评论 -
[CDQ分治 并查集] BZOJ 1453 [Wc]Dface双面棋盘
基本就是加边删边维护连通性的问题了用并查集维护按时间分治做两遍就好了#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1原创 2017-01-20 08:00:34 · 416 阅读 · 0 评论 -
[删边最短路 并查集] BZOJ 1576 [Usaco2009 Jan]安全路经Travel
hzwer是这么说的首先用dijkstra得出最短路径树然后我的做法是树链剖分+线段树对于一条不在最短路树的有向边(无向可看成两条有向)u-v,长度L,设t=lca(u,v)那么对于t-v的路径上所有点x,都可通过1-t-u-v-x路径长度为d[u]+L+d[v]-d[x]最小化这个长度,也就是最小化d[u]+d[v]+L所以我们原创 2016-11-04 07:01:34 · 603 阅读 · 0 评论 -
[删边最短路 并查集||线段树] BZOJ 2725 [Violet 6]故乡的梦 & 4400 tjoi2012 桥
首先求出一条S到T的最短路P,如果不是最短路上的边删了肯定不影响答案。接着证明去掉一条边(u,v)之后最短路一定是这样存在一条边(x,y),然后最短路径是S->x->y->T,并且S->x,y->T都是原图中的最短路。考虑S的最短路径图和T的最短路径图。于是只要考虑一条边(x,y),然后求出S到x的最短路和这条最短路最早什么时候离开P,记作x’,同理求出y’。于是(x,y)这条边可原创 2016-11-04 07:04:50 · 2039 阅读 · 0 评论 -
[并查集 || 点分治 树重心] 2015 计蒜之道 复赛 京东的物流路径
官方题解:本题有多种解法。首先是点分治的思想,在点分治的时候,我们每一次选取一个中心,先统计过中心的路径最大值,然后删掉中心,递归处理其它子树。统计过中心的路径最大值,我们以中心为根深度搜索一遍,一个需要注意的地方是路径的两个端点不能在同一子树内,因为这样可能会重复统计。所以我们把路径按子树分类,然后点权排序以后更新路径按子树分类的最大值和次大值,之和与当前点权的乘积就是答案。本题还可原创 2016-11-10 18:14:03 · 429 阅读 · 0 评论 -
[并查集 构造] Codeforces 723F#375 (Div. 2) F. st-Spanning Tree
并查集乱搞的构造竟然因为return printf的返回值 无限RE#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,10000,st原创 2016-10-09 08:19:43 · 476 阅读 · 0 评论 -
[乱搞 暴力 并查集] BZOJ 3563 DZY Loves Chinese
好神奇的一道题 不多说 最后一次询问暴力并查集#include#include#includeusing namespace std;inline int read(int &x){ static char c=getchar(); for (;!(c>='0' && c<='9');c=getchar()) if (c=='\n' || c==EOF) return原创 2016-04-30 13:57:20 · 671 阅读 · 0 评论 -
[Random Heap 并查集] BZOJ 1455 罗马游戏
裸的可并堆 Random Heap 还是很兹瓷啊#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fre原创 2016-04-30 16:07:31 · 390 阅读 · 0 评论 -
[CDQ分治 并查集 || LCT] BZOJ 4025 二分图
Po姐的姿势:http://blog.csdn.net/popoqqq/article/details/45671813LCT的做法:考虑随便维护一个图的生成树,不难发现,如果一条边加入后,形成奇环的话就不是二分图否则的话,我们可以无视这条边,因为如果之后再新加入一条边和这条边形成了一个奇环那么新加入的边一定和原来生成树上的边也能形成奇环所以我们直接维护一棵生成树即原创 2016-05-02 13:36:57 · 556 阅读 · 0 评论 -
[仙人掌 并查集 组合计数] BZOJ 4450 [Neerc2015]Cactus Jubilee
题意:给你一棵仙人掌,求有多少种方案使得移动一条边之后的图形仍是仙人掌。题解:#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2原创 2016-07-09 20:38:03 · 969 阅读 · 0 评论 -
[并查集] BZOJ 4243 交朋友
Po姐说把能进行会议的国家之间都用并查集连接起来,然后把每个进行过会议的国家扔进队列跑BFS,将搜到的国家用并查集连接 最终答案等于每个单点的出度个数+2*C(每个集合的大小,2) #include#include#include#include#define V G[p].vusing namespace std;typedef long long ll;原创 2016-06-22 18:37:34 · 966 阅读 · 0 评论 -
[并查集 树] BZOJ 4551 [Tjoi2016&Heoi2016]树
本来想的二分加树链剖分结果直接离线并查集可过记录fat为上边的第一个有标记的祖先#include#include#include#define V G[p].vusing namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1原创 2016-05-29 21:37:28 · 352 阅读 · 0 评论 -
[分块 并查集] BZOJ 4537 [Hnoi2016]最小公倍数
题解:http://www.cnblogs.com/y7070/p/5412793.html暴力分块”对于每一组,将符合一组a的询问选出来,将这些询问和这一块之前的边(a一定小于这些询问)按b排序,然后交替插入,询问,对于一个询问,在当前块也有可能有满足的边,我们将其加入,考虑后并撤销“#include#include#include#include原创 2016-04-22 10:23:24 · 637 阅读 · 0 评论 -
[并查集 思路题] BZOJ 2503 相框
%%% PoPoQQQ http://blog.csdn.net/popoqqq/article/details/48031135#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p原创 2016-04-19 18:30:49 · 544 阅读 · 0 评论 -
[并查集 杂题] BZOJ 4452 [Cerc2015]Export Estimate
关键就是一个观察 怎么判断是个环 在维护并查集的时候顺便维护下size和度数为2的点的size#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&原创 2017-04-13 17:14:40 · 548 阅读 · 0 评论