
并查集
酷酷的Herio
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
G - 01Sequence(贪心&dsu)
G - 01Sequence(贪心&dsu)区间按右端点排序,每次靠右填,填的时候用dsu快速找到最近的000。查询的话用BIT维护即可。每个位置最多被填一次,时间复杂度:O(mlogm+nlogn)O(mlogm+nlogn)O(mlogm+nlogn)#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull; const int N=2e原创 2021-08-30 15:29:41 · 414 阅读 · 0 评论 -
E. Binary Matrix(dsu&滚动)
E. Binary Matrix(dsu&滚动)考虑空间限制,采用滚动数组维护dsudsudsu。注意合并的时候向左上合并,这样下一行状态才能继续更新。时间复杂度:O(nmlogm)O(nmlogm)O(nmlogm)// Problem: E. Binary Matrix// Contest: Codeforces - Educational Codeforces Round 31// URL: https://codeforces.ml/problemset/problem/884/原创 2021-08-26 15:35:16 · 411 阅读 · 0 评论 -
Black and white(MST)
Black and white(MST)思路考虑对题意中的操作进行分析:假定这四个数组成的子矩形的左上角是:(x1,y1)\large (x_1,y_1)(x1,y1)右下角是:(x2,y2)\large (x_2,y_2)(x2,y2)要使得我们能进行该操作,则这两行两列中要有三个位置有数字的。而位置(i,j)\large (i,j)(i,j)的数字就是第iii行第jjj列的连通桥梁。为了更好的表达连通性,不妨人为定义一个顺序(逆时针),我们将点权转化为边权。这样为了让四个点连通原创 2021-07-24 19:10:25 · 326 阅读 · 1 评论 -
P1186 玛丽卡(最短路&线段树&并查集)
P1186 玛丽卡(最短路&线段树&并查集)题意:无向连通带权图,删掉一条边后所有最短路的最大值。思路:显然先跑一遍最短路,然后记录最短路的边,非最短路的边无影响,依次删除最短路的边跑最短路,时间复杂度:O(nmlogn)O(nmlogn)O(nmlogn),会T。考虑如何优化。考虑强制用其他非最短路跑最短路,会替换掉最短路的哪些路径,将这些路径的贡献该为利用其他边跑最短路的最小值,这样就变成了一个区间修改问题。然后查找路径的话,可以利用并查集,将最短路上的路径的fa都标记为自己原创 2021-07-05 10:29:39 · 373 阅读 · 0 评论 -
AtCoder Beginner Contest 049(ABCD)
AtCoder Beginner Contest 049(ABCD)A - UOIAUAI思路:特判即可。B - Thin思路:按题意模拟。C - Daydream思路:从后往前特判。D - Connectivity思路:求两个并查集的交集大小即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1原创 2020-08-13 09:38:31 · 522 阅读 · 0 评论 -
Interesting Computer Game(DFS||并查集)
Interesting Computer Game(DFS||并查集)思路:转化为连通子图G<V,E>G<V,E>G<V,E>的顶点数之和,若无环贡献为顶点数,否则为顶点数减1.dfsdfsdfs做法#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;#define ms原创 2020-08-03 19:44:08 · 1112 阅读 · 0 评论 -
Operating on a Graph(并查集)
Operating on a Graph(并查集)思路:并查集+链表。但是我的这个写法没体现出链表的优势。主要思路就是将当前询问结点xxx的相邻结点进行访问,如果根不是xxx就进行合并结点,更新并查集。貌似有一个优化就是先将g[x]g[x]g[x]复制一份,然后清空,如果比当前子结点g[u]g[u]g[u]的大小要小,就直接交换。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=8原创 2020-07-19 10:13:25 · 426 阅读 · 0 评论 -
P3367 【模板】并查集
P3367 【模板】并查集传送门重新复习了一下并查集。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e4+5;#define mst(a) memset(a,0,sizeof a)int n,m,s[N],h[N];int find(int x){ //查找 if(s[x]!=x) s[x]=find(s[x]); return s[x];}int原创 2020-05-29 18:53:18 · 337 阅读 · 0 评论 -
B - 食物链(并查集)
B - 食物链(并查集)思路:类似分层最短路的思路,将结点分为三层。这样就可以不同层的结点的边来表示关系了。然后用并查集维护三层结点即可。AC代码:#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<string>#include<cmath>using namespace std;typedef long lo原创 2020-05-20 22:24:32 · 453 阅读 · 1 评论 -
白魔法师(DFS&并查集)
白魔法师(DFS&并查集)传送门思路:dfsdfsdfs搜索每个白色连通块,用数组sz[i]sz[i]sz[i]纪录每个白色连通块的大小,用数组bl[i]bl[i]bl[i]记录结点iii属于那个白色连通块。然后遍历一遍结点,如果是白色,则直接取最大值,如果是黑色,则答案=1+∑与u相连的结点vsz[v]=1+\sum\limits_{与u相连的结点v}sz[v]=1+与u相连的结点v∑sz[v]时间复杂度:O(V+E)O(V+E)O(V+E)AC代码:#include<bits原创 2020-05-18 11:29:07 · 399 阅读 · 0 评论 -
F - Agri-Net (最小生成树&kruskal)
F - Agri-Net (最小生成树&kruskal)思路:板子题。(第一次学这个算法标记一下)。思路就是对边排序,取n-1条边生成一棵权值和最小的树。生成树的过程用并查集实现。AC代码:#include<cstdio>#include<cstring>#include<iostream>#include<queue> #in...原创 2020-04-21 10:42:11 · 470 阅读 · 0 评论 -
牛客小白月赛24 E.旅旅旅游(最短路&并查集)
牛客小白月赛24 E.旅旅旅游(最短路&并查集)题目传送门思路:AC代码:#include<bits/stdc++.h>using namespace std;const int N=1e5+5,M=5e5+5;typedef long long ll;ll d1[N],d2[N];int n,m,s[N];struct node{ ll d; ...原创 2020-04-20 12:30:55 · 405 阅读 · 0 评论 -
牛客小白月赛24 H.人人都是好朋友(离散化&并查集)
牛客小白月赛24 H.人人都是好朋友(离散化&并查集)题目传送门思路:将朋友的关系建立一个并查集。再遍历一遍,看两个敌人的根结点是否相同。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e6+5;#define mst(a) memset(a,0,...原创 2020-04-19 20:22:13 · 396 阅读 · 0 评论