并查集
pubgoso
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad) E.Team-Building 可撤销并查集
题目链接思路:转换题意就是求选两个不同的组构成的子图是一个二分图。那么可以先把一些自身就构成奇环的点找出来,这些点别的组也不能选。接下来我们对连接不同组的边进行分类讨论,因为显然两个组构成奇环肯定环上只有两个组中的点(自身构成奇环的已经被扣掉了)。那么对每一组都用并查集来check是否合法。由于有很多不同的组,那么就用可撤销并查集来撤销上一次的merge即可。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc+原创 2020-11-05 21:16:50 · 267 阅读 · 3 评论 -
2017 CCPC秦皇岛 D.Graph Generator
题目链接度数大的点肯定时后加进去的。那么猜想按度数小的顺序加可能是一组合法解。并查集维护连通性,每次看连出去的边和图中存在的边的数量是否合法。就对了…看了别的网友写的可撤销并查集维护感觉是一个道理但是麻烦很多。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#de原创 2020-11-03 21:56:11 · 187 阅读 · 0 评论 -
Grakn Forces 2020 E.Avoid Rainbow Cycles
思路:考虑环上所有边不同色,即,每种颜色任意出一条边,构成的图都是无环的。我们将每个集合的点连向一个集合源点,共m个集合源点,每个点都往包含该店的集合源点连边,那么这就是一个并查集的过程,可以很轻松的知道什么时候会产生环,那么在这之前将点都排好序,就可以贪心的删除最优点了。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long lon原创 2020-10-04 15:30:13 · 118 阅读 · 0 评论 -
Codeforces Round #673 (Div. 2) F - Graph and Queries
思路:删边可以倒着来看就变成加边,维护一个可撤销并查集的同时对每个点维护一个set来储存p值,那么询问就是询问一个联通块中最大的p,我们在合并的时候用启发式合并的思想对两个set进行合并即可。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 5e5 + 10;#define fi f原创 2020-10-03 13:17:53 · 201 阅读 · 0 评论 -
2020牛客暑期多校训练营(第八场)A.All-Star Game
思路:由题可以得到一个结论:fans和player组成的联通快只需要一个player就可以让这个联通快内所有fans都满足条件。那就直接把每个关系当成一个边,按时间建线段树,用可撤销并查集,维护图的连通性即可。对于有单独的fans组成一个联通快的显然无解了。。#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;原创 2020-08-07 13:43:30 · 368 阅读 · 0 评论 -
Educational Codeforces Round 87 (Rated for Div. 2) E. Graph Coloring 并查集
题目链接题意:给你一个图,你要给每个点染色(1,2,3),满足相邻点奇偶不同,且颜色数量给定。思路:显然这张图的所有连通块必然都是二分图,否则存在奇环的话就必然不合法。那么先用并查集处理出所有连通块的两侧大小,用记录路径的dp处理出染2的方案就做完了。并查集判断二分图的一些细节见:此处#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define f原创 2020-05-20 15:18:51 · 150 阅读 · 0 评论 -
hdu3478 Catch 并查集
题目链接大意:给你一个无向图,和一个起点s你可以花费单位时间,从当前位置转移到相邻位置。问 :是否存在一个时刻能出现在所有城市上。思路:显然,图必须是联通的才行。其次 如果这个图是个二分图的话,那么每时每刻,能到达的点都是一测的点集。不是二分图的话,就是满足的(我也证明不了为啥)写这题主要是想理解一下并查集判二分图的做法。下面给出并查集判二分图的具体实现:用f数组表示点x所在联通块的f[x]。其中f[i] 表示与i在同一侧的连通块,f[i+n]表示与i不在同一侧的连通块。那么每次新加一个边原创 2020-05-20 15:13:25 · 233 阅读 · 0 评论