并查集
~无相~
这个作者很懒,什么都没留下…
展开
-
leetcode990. 等式方程的可满足性
思路做法:用并查集来存储关系和判断结果,首先对信息的顺序进行一下改变,等于的信息先输入,这对于整个判断是没有关系的,而先把等于的信息存入和判断对于后面的不等于更好判断①:等于的判断(a==b):先判断一下两个变量是否都已经被放入一个集合中了,如果都已经放入一个集合中了,在判断一下这两个变量是否在同一个集合,如果不在,直接输出false,如果在,就判断下一个信息,如果其中有一个变量没有被放入一个集合,就放入另一个变量的集合中②:不等于的判断(a!=b):直接判断两个变量a和b是否在同一个集合中即可原创 2020-06-08 15:37:26 · 86 阅读 · 0 评论 -
Restructuring Company(区间合并并查集)
思路题意:一共有三种操作:①:合并x和y②:合并[x , y]的所有数③:查询x和y在不在同一个连通块里面做法:第二个操作如果直接暴力会T,所以要优化一下,假设x和x+1,x+2已经再一个连通块里面了,就不用再每一个都去做①的操作了,所以就可以优化这个部分,我们记录下第一个比x大并且不属于x连通块的点的编号,合并完x,下一步直接跳到那个点,合并那个点即可。搬运代码#include<cstdio>#include<iostream>#include<algo转载 2020-06-01 16:31:24 · 394 阅读 · 0 评论 -
How Many Tables(并查集)
思路做法:就是一个求连通图的个数问题,求出有几个输出即可代码#include <bits/stdc++.h>using namespace std;const int N = 2e5+10;int fa[N],n,m;int Find(int x){ if(fa[x] == x) return x; fa[x] = Find(fa[x]); return fa[x];}int main(){ int T; cin >&g原创 2020-06-01 15:23:45 · 203 阅读 · 0 评论 -
Harmonious Graph(并查集)
思路题意:n个点,m条边,组成若干个连通图,如果一个点x能到另一个点y,那么如果(x,y)中任意一个点,都能到y,就称这个图为和谐图,求需要连多少个边,使得所有连通图成为和谐图做法:用并查集存下所有点的父节点,并且连通图的父节点是该连通图中所有点中编号最大的点,然后从小到大遍历所有的点,对于每一个点,如果这个点的所在连通图的根节点不是该点,就都判断一下该点到该点连通图的最大点之间的点是不是在这个连通图内,如果不是,就连入这个连通图,并且更新一下连通图的最大点。代码#include <bit原创 2020-06-01 14:55:59 · 216 阅读 · 0 评论 -
D - Arpa's weak amphitheater and Mehrdad's valuable Hoses
思路是一个分组背包问题,中间用并查集来进行分组即可代码#include <cstring>#include <iostream>#include <algorithm>#include <vector>using namespace std;typedef long long ll;const int N=1005;const i...原创 2020-04-17 12:08:55 · 124 阅读 · 0 评论 -
试题 历届试题 发现环
思路并查集来寻找环,如果两个点已经在同一个集合里面了,还把这两个点起来,那就证明这两个点在一个环上,并且这里的环根据题意只有一个,所以只要dfs一遍,能从一个点走到另一个点的路径就是环,并且路径唯一。代码#include <iostream>#include <algorithm>#include <cstdio>#include <vecto...原创 2020-04-01 09:41:30 · 156 阅读 · 0 评论 -
(蓝桥杯)合根植物 (并查集)
思路一开始没看懂,其实就是看一下集合又几个,也就是用并查集,不是连通块,所以我们只要用一下并查集,最后数一下有几个集合就可以了代码#include <cstring>#include <algorithm>#include <iostream>using namespace std;int a[1000005];int find(int x){...原创 2020-03-30 22:06:13 · 141 阅读 · 0 评论 -
AcWing 238. 银河英雄传说
思路其实就是个简单的并查集,只不过这里需要知道两个战舰的长度,需要len数组存一下某个根节点队列的长度,例如:len[2]就是以2为根节点的队列长度,那么两个集合合并的时候,将y集合接到x集合尾部,d[i]表示i节点到根节点的距离的话,d[y的根节点]=len[x],在更新len[x]+=len[y]即可代码#include <cstring>#include <iost...原创 2020-03-02 16:37:33 · 127 阅读 · 0 评论 -
奇偶游戏
思路带边权并查集#include <cstring>#include <algorithm>#include <iostream>#include <map>using namespace std;unordered_map<int,int> S;const int N=20010;int p[N];int d[N...原创 2020-03-02 15:23:00 · 136 阅读 · 0 评论 -
程序自动分析
思路代码#include <cstring>#include <algorithm>#include <iostream>#include <map>using namespace std;const int N=2000010;unordered_map<int, int> mp;//用来存下离散化后的编号int p...原创 2020-03-02 12:57:46 · 265 阅读 · 0 评论 -
搭配购买
思路代码#include <cstring>#include <algorithm>#include <iostream>using namespace std;int p[10010];int w[10010];int v[10010];int f[10010];int n,m,sum;int find(int x){ if ...原创 2020-03-02 11:53:25 · 179 阅读 · 0 评论 -
AcWing 1250. 格子游戏
思路如果一条边两个点连起来后,形成了一个封闭的圈,那么这两点之前肯定是再同一个联通块里面,所以只要用并查集判断一下连两个点的时候,是不是再同一个连通块内就可以了。代码#include <cstring>#include <algorithm>#include <iostream>using namespace std;int p[40000];i...原创 2020-03-02 10:07:45 · 324 阅读 · 0 评论