知识点记录
Stig.Huang
这个作者很懒,什么都没留下…
展开
-
python 基于列表的并查集实现模板
class UnionFind: def __init__(self, n: int): self.father = list(range(n)) self.size = [1] * n self.n = n # 当前连通分量数目 self.setCount = n def find(self, x: int) -> int: if self.father[x] == x:原创 2021-01-29 22:23:09 · 496 阅读 · 1 评论 -
python 通过字典实现的并查集按秩合并(并查集merge中size的优化) 解释及模板
并查集有两种在 merge() 中的优化一种基于 size 的;一种基于 rank 的,rank的优化更彻底;并查集还有在 find() 中的优化,就是路径压缩所有操作均基于 并查集路径压缩及实现的模板实现基于size的优化:这里先看一个简单的例子来理解优化过程index1234fatherNone11None首先进行合并操作将1节点与4节点连通相当于代码模板中的merge(1, 4)index1234father原创 2021-01-24 04:27:59 · 517 阅读 · 3 评论 -
python 基于字典的并查集模板 + Kruskal算法模板
Kruskal算法Kruskal基于并查集算法来找到最小生成树。算法步骤1、初始化并查集2、根据权重对边进行排序。3、遍历排序后的边,判断该边对应的两个顶点是否联通,然后将其联通,并加入生成树按照模板简单来说先初始化并查集将节点add进并查集计算边的权重并加上边放在新的列表edges中在edges中对边按照权重进行排序最后遍历并查集:判断是否连通:若连通则跳过若不连通则连通两节点并将结果加上权重Code模板中 points 举例:points = [[0,0]原创 2021-01-24 03:07:39 · 398 阅读 · 1 评论 -
python 字典实现并查集并计算连通分量
class UnionFind(): def __init__(self): self.father = {} self.size = 0 def find(self, x): root = x while self.father[root] is not None: root = self.father[root] return root def merge(self, x原创 2021-01-17 20:01:01 · 491 阅读 · 0 评论 -
python 字典实现完整并查集的模板(包含路径压缩与基于size的优化)
class UnionFind: def __init__(self): """ 记录每个节点的父节点 """ self.father = {} def find(self,x): """ 查找根节点 路径压缩 """ root = x while self.father[root] != None:原创 2021-01-10 06:08:19 · 354 阅读 · 0 评论