并查集
并查集
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
HDU 6795 Little W and Contest (并查集)
题意:给定n个点,权值只有1和2,互不相连。从中选择3个点,满足3个点的权值之和不少于5,且3个点之间互不相连,计算出不同的选择方案的数量。接着加入n−1条边,每次将两个连通块相连,然后输出当前状态下,不同方案的数量。 题解:并查集 每次减去合并的两个连通块的贡献即可。 下午训练的时候因为在除之前取余wa了好多发… #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<strin原创 2020-07-28 22:55:09 · 269 阅读 · 0 评论 -
HDU 6763 Total Eclipse (并查集)
题意:n个城市(可能不连通),每个城市的亮度为bi,每次选择一个大小为k的集合,这个集合的城市不经过非集合的城市就能两两到达。并且将所有的亮度-1。最终所有的城市的亮度为0,最少需要几次操作。 题解:并查集 要使得操作最少,我们贪心的选,对于一个连通分量,全部选择并进行该分量里最小值大小的操作,将变为0的点删去,再对每个连通分量执行相同操作。 删点不好搞,我们加点,即反过来加最大的点。 将亮度从大到小排序,依次加点,遍历该点的相邻的点,若相邻的点已经遍历过了,那么这个相邻的点的值必然比该点大。 我们可以用并原创 2020-07-23 22:05:04 · 313 阅读 · 0 评论 -
2020牛客多校三 G. Operating on a Graph (并查集+启发式合并)
题意: 题解:并查集原创 2020-07-21 17:03:27 · 226 阅读 · 0 评论 -
CodeForces 95E Lucky Country (并查集+多重背包优化)
题意:n个点m条边,构成多个连通块,增加最少的边,使得至少有一个连通块的点个数只包含4和7。 题解:并查集+多重背包优化 先用并查集求出每个连通块的点的数量,增加边数,其实就是将几个连通块组合,看是否满足要求。我们用多重背包。 对于背包里的物品,数量就是相同点数的连通块数量,价值就是单个连通块包含的点数。求出dp[i]dp[i]dp[i]表示iii个连通块具有的价值,即点数总和。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #includ原创 2020-06-02 18:15:53 · 449 阅读 · 0 评论 -
CodeForces 566D Restructuring Company (并查集)
题意:n个元素,三种操作,第一种将x和y连起来,第二种将[x, y]内所有元素连起来,第三种查询元素x和y是否属于同一集合。 题解:并查集 主要是第二种操作,我们用a[]记录连续区间的右端点,相当于把整个连续点集合当作一个点。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<alg原创 2020-06-02 17:23:03 · 249 阅读 · 0 评论 -
CodeForces 659E New Reform (并查集)
题意:n个点m条边,现在要把这些边变为单向,求没有边连入的最少的点。 题解:并查集 对于并查集,其实就是一棵树,从根节点往下,那么只有根节点没有边连入,但是对于自环来说,并不存在这样的点。所以只要判断一下在构成集合的时候是否存在自环即可,若存在自环,则将根节点标记。 最后答案就是不存在自环的集合数量。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #原创 2020-06-02 14:29:41 · 163 阅读 · 0 评论 -
CodeForces 731C Socks (并查集)
题意:n只袜子,穿m天,每只袜子有一种颜色,有k种颜料对袜子染色,接下来的m天每天给你指定两只袜子穿,问现在最少需要染色多少次才能使得接下来的m天每天穿的袜子颜色都相同。注意是一次性染色。 题解:并查集 既然是一次性染色,那么就对所在同一集合的袜子染相同颜色,我们不关心袜子出现几次,所以染的颜色取决于集合中颜色最多的是哪个。 用vector存以根为代表的集合含有的颜色,map存个数,遍历求最多即可。 #define _CRT_SECURE_NO_WARNINGS #include<iostream&g原创 2020-06-02 11:29:05 · 219 阅读 · 0 评论 -
HDU 1213 How Many Tables (并查集)
题意:并查集求多少个集合 题解:并查集 Parent[i]==iParent[i] == iParent[i]==i #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<queue> #include<stack>原创 2020-06-02 09:42:01 · 104 阅读 · 0 评论 -
CodeForces 1253D Harmonious Graph (并查集)
题意:给出n个点m条边,要使得每一个连通图包含的点都是编号连续的点,求还需要添加多少条边。 题解:并查集 既然是连续编号的点,我们得选择一个具有特征的点作为根,这里选择集合中最大的点。 接下来遍历所有点,对于点iii,其根为temptemptemp,temp>=itemp>=itemp>=i,那么[i,temp][i, temp][i,temp]所包含的点必然要跟点iii或temptemptemp连接,这样更新temp=max()temp=max()temp=max()即可。 #defin原创 2020-06-02 09:39:51 · 197 阅读 · 0 评论 -
CodeForces 1167C News Distribution (并查集)
题意:每个人都属于一个或多个集合,称集合里的人互相有关,输出与每个人直接或间接有关的人数。 题解:并查集 Rank[]维护高度,这样cnt[]就可以表示根的集合大小。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<queue&g原创 2020-05-30 16:11:29 · 172 阅读 · 0 评论