查并集
文章平均质量分 63
__Rain
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
牛客练习赛 90 A(贪心 B(博弈 C( D(组成三角形与斐波那契数列,势能线段树 || 并查集跳跃应用
梦想赛道题意:给定一个棵树,构造一个图,满足这棵树是图上的严格次小生成树,图上可以有重边,输出图的最小总权值和即可思路:因为可以有重边,还要最小化总权值和,我们可以考虑给权值次大的边加一条权值为 111 的边,但是如果这棵树所有边的权值都是 111,那么就无法构造寒冬信使题意:nnn 个格子排成一排,每个格子是黑色或者白色的。有双方在格子上进行博弈,根据先后手轮流进行操作,每次操作方可以选择一个白色格子并且翻转这个格子和它前面一个格子的颜色(如果选择的是第一个格子则只翻转这个格子的颜色)。原创 2022-02-24 16:26:56 · 661 阅读 · 0 评论 -
牛客练习赛91 C(贪心+并查集跳跃经典应用 D(前缀和+树状数组处理二维偏序
魔法学院(hard version)思路:题解注意是一次操作是替换区间内某一个字符,一次不是必须替换整个区间经典的并查集应用从高价值字符枚举到低价值字符,那么对于高价值字符覆盖过的区间,低价值字符就没有必要去遍历了。遍历时,用并查集对之前覆盖过的区间进行跳跃即可,因此每个字符至多被遍历一次code:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long long原创 2022-02-21 15:54:13 · 448 阅读 · 1 评论 -
离散化+并查集
P1955 [NOI2015] 程序自动分析vector 离散化常数大离散化之后,数的下标是从 000 开的,当然也可以从 111 开始,要留意这个点这题不能用种类并查集,因为种类不止两三个,每个数都可能是一种code:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long long#define ld long double#define all(x) x.b原创 2022-01-20 16:04:22 · 218 阅读 · 0 评论 -
ABC F(并查集判断是否存在合法交换方案+DFS复原交换方案
F - Swap and Sort题意:给定一个 NNN 的排列 PPP 和 mmm 个操作,每个操作给定两个数 a,ba,ba,b,表示 P[a]P[a]P[a] 和 P[b]P[b]P[b] 可以交换位置,每次可以选定任意操作执行,判断能否把这个排列变成升序的,如果能,则按顺序输出操作的编号,否则输出 −1-1−1思路:号码牌ACWing上这道题目的加强版判断是否存在解,只需要用并查集扫一遍判断当前位置的 P[i]P[i]P[i] 与 iii 是否位于同一个连通块,如果存在不在一个连通块则原创 2022-01-19 00:21:27 · 205 阅读 · 0 评论 -
带权并查集
知乎讲解链接这个感觉讲的挺好的带权并查集作用:它可以记录下每个节点相对于根节点的距离。#define MAXN 50005int fa[MAXN],d[MAXN];int find(int x) { if(fa[x] == x) return x; else { int oldFa = fa[x]; fa[x] = find(oldFa); d[x] = d[x] + d[oldFa]; return fa[x];原创 2021-11-24 23:14:13 · 585 阅读 · 1 评论 -
信息传递(带权并查集求最小环
P2661 [NOIP2015 提高组] 信息传递题意:nnn 个同学玩信息传递,第 iii 个同学只会将信息传递给同学 TiT_iTi,游戏开始时每个人只知道自己的生日,一轮游戏同学 iii 会把信息传递给同学 TiT_iTi ,当某人从别人口中得知自己生日时游戏结束,求游戏会进行多少轮。思路:并查集code:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned l原创 2021-11-24 21:13:59 · 3222 阅读 · 0 评论 -
并查集判环(无向图)
小希的迷宫题意:判断所给图是否连通且无环,满足输出 “Yes”,否则输出 “No”思路:并查集判断连通并且无环即可code:#include<bits/stdc++.h>#define endl '\n'#define ll long long#define ull unsigned long long#define ld long double#define all(x) x.begin(), x.end()#define eps 1e-6using namespac原创 2021-11-08 18:52:54 · 6523 阅读 · 3 评论 -
SWERC 2020 C. Safe Distance(并查集+二分+思维
C. Safe Distance题意:给出一个 X * Y 大小的矩形有 nnn 个人,每个人都在矩阵某个位置求从左下角 0,00,00,0 走到 X,YX,YX,Y 这个过程中,与人的距离的最大值思路:读题我们可以,我们需要使得最小距离最大化,可以想到二分答案难点在于我们该如何 checkcheckcheck如果能想到这种处理方式,题目就迎刃而解了(感觉很难想用并查集维护连通性,检查边界是否有通过人连接起来的,如果有就说明当前的midmidmid 太大,不符合因为是从左下走到右上所原创 2021-10-07 21:03:07 · 461 阅读 · 0 评论 -
ABC#214 D 连通块+并查集 E 区间贪心+并查集
D - Sum of Maximum Weights 并查集#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 1e5 + 9;ll n, m;int f[maxn];struct node{ int x, y, z, sum;}e[maxn];bool cmp(node a, node b){ return a.z < b.z;}int find(in原创 2021-08-14 22:01:54 · 333 阅读 · 0 评论 -
div2 + div1 C题 思维 + 并查集 + 快速幂
C. Little Alawn’s Puzzle读了好久才读懂啥意思,一共就两行,每次操作可以交换上下两个数前提问题解决的条件是:每行都是一个排列,并且所有列没有相同的数问加上当前的这一个情况,在交换之后也符合问题的解一共有多少个分析:根据样例2我们可以发现,如果要交换数字后保证还是一个排列,必须把属于同一个集合的所有列都进行交换,显然是一道并查集,寻找一共有 sum 个集合,对于每一个集合我们可以选择操作或不操作,就是求 2 的 sum 次方。#include<bits/stdc++.h原创 2021-07-06 13:12:26 · 250 阅读 · 0 评论 -
并查集 + map (集合里元素的个数)
Invoking the Magic 20210419ac代码:因为输入的数据可能比较接近int最大值的一半,所以不能直接把输入的数据直接合并。由题可知,我们只需要知道最大的一个集合元素的个数,n最大1e5,所以我们的思路就是对于每一个新的数据,都一对一映射成一个小数据,这样就能用并查集了。#include <bits/stdc++.h>using namespace std;const int N = 3e5 + 9;typedef long long ll;unordere原创 2021-04-19 22:26:57 · 397 阅读 · 0 评论 -
并查集+01背包
经商题意就是找 跟1(也就是自己)在同一个关系的网内的人谈生意 在c精力的条件下获得的最大利益 即01背包#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 10009;int bcj[N];int a[N],b[N],dp[N];int n , m, c;int Find(int x){ int r = x, j, k = x; while(r !原创 2021-03-11 19:34:43 · 171 阅读 · 0 评论 -
并查集 (DSU)
学习链接原创 2020-11-25 18:45:08 · 745 阅读 · 0 评论
分享