城市和城市连在一块,有多少个省? 一群人里面自己和自己亲戚连在一块,有多少组亲戚? 你俩是不是一个小区的? 他俩是不是有一腿 以上所有问题,抽象,概括为分组问题 老并查集了 这里引用一个知乎大佬的并查集讲解,gang的非常好,我就不赘述了。 并查集讲解 大家主要了解一下并查集的两种优化方法,路径压缩 ...
分类:
其他好文 时间:
2021-01-08 11:38:43
阅读次数:
0
CF 603 E题解 又是我做不出来的题。 这题我分析到了“对于每一个询问,查询最小的bound,使得将$w\leq bound$的边都加入,使得所有联通快都是偶数”这一步,然后就卡住了。 可以发现,所有询问的答案不增的,若设无解为$\infty$。 然而还是不会做。 不过我们回忆一下“决策单调性” ...
分类:
其他好文 时间:
2021-01-08 11:30:38
阅读次数:
0
介绍 并查集是一种特殊的树结构,示例图如下 可以很方便的进行以下两种操作:以上图为例 判断元素6和元素4是否属于同一组, 合并元素6和元素4所在的组 代码实现 public interface UF { /** * 容量 */ int size(); /** * 是否已连接 */ boolean c ...
分类:
编程语言 时间:
2021-01-07 11:59:23
阅读次数:
0
原题链接 考察:并查集基础 在读入学生团体的时候,没必要用数组存储,直接将他们并入树中即可,注意:当我们计算人数的时候,已经在一个集合中的人不能重复计算 当时看y总犯了这个错误,结果自己写又错了233 1 #include <iostream> 2 #include <cstdio> 3 using ...
分类:
其他好文 时间:
2021-01-06 11:59:44
阅读次数:
0
// 并查集模板,包含路径压缩(参考 findset 函数)以及按秩合并(参考 sz 变量) class UF { public: vector<int> fa; vector<int> sz; int n; int comp_cnt; public: UF(int _n): n(_n), comp ...
分类:
其他好文 时间:
2020-12-25 12:01:55
阅读次数:
0
给一个数组queries,queries[j]=[p, q, limit],你的任务是对于每个查询,判断是否存在从 p 到 q 的路径,且这条路径上的每一条边都 严格小于 limit。 2 ? n ? 105 1 ? edgeList.length, queries.length ? 105 思路: ...
分类:
其他好文 时间:
2020-12-25 11:59:48
阅读次数:
0
初一看,sb题,上去一个并查集,很快啊,返回一个MLE,定睛一看,系统开的内存很小,但是这个算法复杂度又是这么正确 因此考虑优化内存,这样用滚动数组优化即可 #include<bits/stdc++.h> using namespace std; typedef long long ll; type ...
分类:
其他好文 时间:
2020-12-10 11:39:56
阅读次数:
13
并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在 ...
分类:
其他好文 时间:
2020-12-04 11:41:44
阅读次数:
13
一、理论 并查集的定义: 并查集是一种树型的数据结构,用于处理一些不交集的合并和查询问题。一般用数组实现。 Find:确定元素属于哪一个子集,它可以被用来确定两个元素是否属于同一个子集。 Union:将两个子集合并成同一个集合。 并查集的优化: 优化1: 降低rank,提高查询效率。合并时要考虑ra ...
分类:
其他好文 时间:
2020-12-04 11:19:39
阅读次数:
6
struct UFS { stack<pair<int*, int> > stk; int fa[maxn], rnk[maxn]; inline void init(int n) { for (int i = 0; i <= n; ++i) fa[i] = i, rnk[i] = 0; } inl ...
分类:
其他好文 时间:
2020-12-03 12:16:10
阅读次数:
7