![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
EMber _
人但有追求,世界亦会让路。
展开
-
bzoj1015[JSOI2008]星球大战starwar
分析:思路比较明显了,直接并查集,正着做不行倒着呗,直接倒着做,变成一个个加点,这样就和谐很多了。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)u原创 2017-04-07 15:27:19 · 178 阅读 · 0 评论 -
bzoj3694 最短路 并查集(树链剖分)
题意:给出一个图和他的最短路树,让你求不经过最短路最后一条边的最短路。 。。一开始以为直接上次短路,后来发现zz了,并不可以。。 然后%了一发题解。 其实就是要在最短路树之外找一条路径来跑。。 那么假设现在有一条非树边x-y,长度为len。 那么我们对于t=lca(x,y)(假设y在树上x不在),可以把1-i的路径转化为(i在t到y之间)1-t-x-y-i. 这样的路径长度是dis[x]原创 2017-05-10 22:04:56 · 322 阅读 · 0 评论 -
bzoj1576[Usaco2009 Jan]安全路径Travel(堆优化dijkstra+并查集)
spfa会被卡。。 思想和3694差不多。 就是最短路树要自己跑dij建出来,其余的基本上一模一样。#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) f原创 2017-05-10 22:27:07 · 326 阅读 · 0 评论 -
bzoj4530[Bjoi2014]大融合 线段树合并+dfs序+并查集
题意比较明显就不说了。 这题我思考了一会儿,由于题解并不说清楚为什么这样处理的原因,我想了很久才想通= =。 建议看完理解题解以后不要看标,自己独立打出来,这题的思路很妙~。。首先很容易知道先把原树建出来以后,答案就是(size(fa)-size(x))*size(x) 那么问题是怎么样处理询问呢,当然你可以树剖暴力搞,因为我一开始也是这么想的,这里提供一种更优美的解法= = 我们把树建出来原创 2017-07-11 08:54:28 · 541 阅读 · 0 评论 -
bzoj3430 [Usaco2014 Jan]Ski Course Rating 并查集+bfs
这题正解脑洞有点大。。一开始并没有想到正解,只是会二分暴力= = 后来膜了一发题解发现原来还有人二分+可持久化并查集做的,不过这是针对t不同的情况下= =以后可以出个题祸害社会 正解是先把任意两点之间连边,记录一下出发点和到达点,然后按照边的大小排序,从小到大做,每一次用并查集将可以互通的两块联合在一起,直接计算贡献。。#include<cstdio>#include<algorithm>#原创 2017-07-22 10:42:42 · 519 阅读 · 0 评论 -
JZOJ5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人 并查集+启发式合并
题意:构造一个长度为n数列,给出m个要求,保证第一个满足,每个要求具体描述为li,ri,ki,表示l到r的异或和为k。对于每一个操作,如果能和前i-1个要求不冲突(能构造出一个合法序列),输出1,否则输出0,最后输出合法序列(不合法的要求忽略),要求字典序最小。大爷好像很喜欢启发式合并= =。被虐了,完全没想到并查集那个地方去。 假设我们现在已经构造出了原序列,接下来的问题就是怎么符合要求。那么我原创 2017-09-17 15:43:04 · 413 阅读 · 0 评论 -
bzoj1854 [Scoi2010]游戏 并查集/二分图最大匹配
题意:n个物品,每个物品两个权值,要求拼凑成一个1….m的序列,每个物品只能用一次,每个物品只能选择其中一个权值,问m最大是多少,n<=1e6. 这题我一开始第一反应其实就是二分图匹配之类的东西,但是没有细想觉得DP好像更靠谱(个鬼),然后dp了半天d不出来,觉得是不是什么奇怪的贪心,结果还是WA,最后看题解才发现就是二分图匹配,不过还有并查集做法= =并查集的话就有一个性质,每个物品的两个属性a原创 2017-09-20 22:57:15 · 204 阅读 · 0 评论 -
bzoj1196 [HNOI2006]公路修建问题 二分
题意:看链接吧,懒得写了,很好懂。 十分简单的二分,判断跟mst差不多。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;const in原创 2017-10-02 16:17:52 · 244 阅读 · 0 评论 -
bzoj3706反色刷 欧拉图+并查集(欧拉图性质简介)
题意:一个无向图,每条边有黑白两种颜色,要求用最少的反色刷使得所有边变为白色,注意刷子会回到出发点。 明显欧拉回路,注意到欧拉回路的性质,即无向图任意点的点数不能使奇数。那么我们用并查集维护每个连通块内黑色边的数量以及他们的度数,用桶存起来。一个基本的维护。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b原创 2017-11-10 15:17:40 · 481 阅读 · 0 评论