![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
一种高效的数据结构
为什么他们cf写的这么快
这个作者很懒,什么都没留下…
展开
-
Educational Codeforces Round 49 (Rated for Div. 2) D. Mouse Hunt(带权并查集+dfs)
题目链接思路:只要求一下每个环上的点的最小值就行了,用并查集维护连通块。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 2e5+5 ;int a[maxn],father[maxn];int findfather(int x){ if(x==fathe...原创 2020-04-19 20:50:10 · 141 阅读 · 0 评论 -
Codeforces Round #544 (Div. 3) F1. Spanning Tree with Maximum Degree(并查集+贪心)
题目链接思路:每次贪心的选择度最大的点进入生成树#include<bits/stdc++.h>using namespace std;const int maxn=2e5+5;int du[maxn],father[maxn],num[maxn];vector<pair<int,int>>ans;vector<int>g[maxn]...原创 2020-04-11 21:03:27 · 127 阅读 · 0 评论 -
Codeforces Round #600 (Div. 2) D. Harmonious Graph(并查集)
题目链接思路:用并查集维护每个连通块。#include<bits/stdc++.h> using namespace std;typedef long long ll;const int maxn=2e5+1;int n,m,father[maxn];int findfather(int x){ if(x==father[x]) return x; int i=...原创 2020-04-03 19:34:05 · 105 阅读 · 0 评论 -
Codeforces Round #363 (Div. 1) B. Fix a Tree (并查集)
题目链接思路:可以任意选一个i==a【i】的点作为根节点,用并查集将几个连通块都合并到一起。#include<bits/stdc++.h>using namespace std;typedef long long ll; const int maxn=2e5+1; int n,flag=0,cnt,root=-1,father[maxn],a[maxn];int fi...原创 2020-03-16 21:43:52 · 90 阅读 · 0 评论 -
ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem(种类并查集)
题目链接思路:种类并查集模板题,如果i表示关,i+m就是它的对立面就是开。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn =1e5+5; int n,m,pos,t,a[maxn],father[maxn<<1];vector<int>...原创 2020-03-18 21:55:47 · 648 阅读 · 0 评论 -
Codeforces Round #500 (Div. 1) [based on EJOI] B. Chemical table(并查集)
题目链接思路:写了半天的模拟才发现居然可以用并查集,不过本人太菜估计也想不到QAQ,把给出的每个点的横纵坐标放进一个集合,如果一个点横坐标和纵坐标在一个集合里,它是肯定可以被造出来的,剩下来的就是求连通块个数了。PS:对于样例三我解释一下一开始没看懂,(1,1)为什么能出来呢,其实你可以看成是被(1,3),(3,1),(3,3)弄出来的。#include<bits/stdc++.h...原创 2020-03-05 20:58:12 · 291 阅读 · 3 评论 -
Codeforces Round #346 (Div. 2) F. Polycarp and Hay(并查集+bfs)
题目链接思路:从大到小枚举矩阵里的每一个数,因为答案肯定是这其中的某一个数,假设当前数为x,然后把大于当前数的坐标放进一个集合(并查集实现),当并查集内的连通块个数大于k/x,那么就说明当前数X是可行方案,接着再bfs构造出k/x个x就好了,其他全为0.#include<bits/stdc++.h>using namespace std;typedef long long ...原创 2020-03-11 21:19:01 · 115 阅读 · 0 评论 -
MemSQL Start[c]UP 3.0 - Round 1 E. Desk Disorder(并查集+组合数组+思维)
题目链接思路:我们可以发现建边之后只有三种情况,第一有自环,第二是树,第三是环(非自环),对于第一种答案显然是1,第二种答案就是节点数,第三种答案就是2,根据乘法原理如果有多种情况的话答案应该相乘。用并查集判环就可以了。#include<bits/stdc++.h>using namespace std;typedef long long ll; const int m...原创 2020-03-02 21:59:12 · 157 阅读 · 0 评论