并查集
给我一瓶AC钙
是一颗萌菜没错了
展开
-
并查集入门
基本模板#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;int f[maxn],r[maxn];void init(int n){ for(int i=0;i<n;++i){ f[i]=i; r[i]=0; }}int find(int x){ if(f[x]==x...原创 2018-09-03 20:21:07 · 138 阅读 · 0 评论 -
(POJ) 2513 Colored Sticks (字典树/map+并查集+欧拉路径)
传送门题目大意:给你两段有颜色的木棒,只有相同的颜色才能连接起来,问你最后给你的木棒最后能不能拼成一根长木棒。解题思路:这里字典树只是返回了不同颜色的编号,用map<string,int>也是可以的,我们可以记录每个颜色的度,一个木棒的两个颜色可以相连,所以这里可以用并查集将不同的颜色并起来,最后如果,有颜色的祖先和其他不一样,那肯定不能连起来,反之那就要判断欧拉路径 了,如果...原创 2019-01-29 15:15:06 · 166 阅读 · 0 评论 -
(Luogu) P1525 关押罪犯 (并查集)
传送门题目大意:1~n个人,一张关系网,连线权值代表起冲突的影响力,将n个人分成两部分,求最小的冲突事件影响力。如图答案为3512.解题思路:我们当然不希望权值大的边存在,所以将边从大到小排序,逐个处理,边所对的两方各为敌方,我们应该将一个人和他敌人的敌人并到一个集合,每一次合并都相当于去掉了这条边,从大到小去,当发现了这条边的两段已经在一个集合了,说明在前面合并去掉大边的时候,合并了...原创 2019-02-19 12:53:22 · 123 阅读 · 0 评论 -
(Luogu) P2024 [NOI2001]食物链 (并查集)
传送门解题思路:将并查集分为三个部分 分别是同类,猎物 ,天敌,取x(x属于1~n)举个栗子,与x一块的为x的同类,与x+n为一块的为x的猎物,与x+2*n为一块的为x的天敌。我们只需要同时维护这三个部分,并用来判断假话即可。由于只有A,B,C三种动物,那么A猎物的猎物就是A的天敌这需要注意维护。代码如下:#include<cstdio>#include<iostre...原创 2019-02-19 15:43:28 · 130 阅读 · 0 评论 -
(CodeForces) Codeforces Round #541 (Div. 2) D. Gourmet choice (并查集+拓扑排序)
传送门题目大意:第一天n个菜,第二天m个菜,一个n*m的矩阵代表他们之间的优劣关系,根据这个矩阵用数字来给每一个菜品打分,使得最大的数字最小。比如 Aij 是> 说明第一天的 i菜 比第二天的 j菜好。解题思路:根据题目的描述,两道菜之间的优劣情况,我们可以连一条权值为1的单向边,而哪些没有指向他的点,那就是最小的数为1。从入度为0的点开始,一步步往里面走,我们自然可以想到拓扑排序,...原创 2019-02-25 15:33:46 · 116 阅读 · 0 评论 -
(CodeForce) C. Edgy Trees (并查集)
传送门题目大意:给你一棵树,有黑边和紫边,一种k个元素的集合,a1到a2走最短路径.....只要经过黑边那就是好的,问有多少个这种集合。解题思路:不考虑紫边黑边,就k个元素的集合,那有n^k个。考虑到如果那个集合都是一个全是紫边联通块里的元素,那如何也是不可能走到黑边的,或者是只和黑边连接的点,这也算是一个联通块。那只要把总共的减去这些不合法的,那就是正确的了。减去每个不合法联通块的个数的...原创 2019-03-28 15:16:12 · 219 阅读 · 0 评论 -
(Luogu)P1197 [JSOI2008]星球大战 (并查集)
传送门解题思路:只要从后往前一个一个修复,并建边就行了。用并查集维护,如果出现了不在一个联通块的话,那联通块个数--。#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second#define ms(_data,v) memset(_data...原创 2019-03-28 21:00:15 · 116 阅读 · 0 评论 -
(Nowcoder) E.Explorer (线段树+可撤销并查集)
传送门题意:给出一个无向图,每条边有一个size区间[l,r],代表可以通过人的大小,求可以从1到n,人的大小的方案数。解:可以lct做,可是我还没学过lct。线段树+并查集的做法,我们先离散化size,使得线段树的节点代表size的一段区间,全部左开右闭(这样好处理)。然后我们将符合节点的边加进去,不需要下放。最后我们一遍深搜,深搜的同时将该节点的边,用并查集维护点之间的联通性,搜到叶子...原创 2019-08-10 21:14:13 · 186 阅读 · 0 评论 -
(2019徐州网络赛) B. so easy (线段树 || 并查集)
传送门题意:就是两种操作,1:使得x点无效,2:查找大于等于x的最小有效点解:由于数据达到1e9不好set,所以就线段树操作就像了,节点维护区间,和存在的有效点数,然后查询的时候,用存在的有效点数剪枝一下即可。(好像有暴力过的???#include<bits/stdc++.h>#define il inline#define pb push_back#define ...原创 2019-09-07 18:57:14 · 425 阅读 · 0 评论