首页 > 编程语言 >算法-并查集

算法-并查集

时间:2024-10-31 13:00:04浏览次数:3  
标签:int 查集 father 算法 node1 顶点 node2 find

1. 寻找图中是否存在路径(LeetCode 1971)

有一个具有 n 个顶点的双向图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。
图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。
每个顶点对由 最多一条 边连接,并且没有顶点存在与自身相连的边。

请你确定是否存在从顶点source开始,到顶点destination结束的有效路径
如果存在有效路径返回 true,否则返回 false 。

class Solution:
    def validPath(self, n: int, edges: List[List[int]], source: int, destination: int) -> bool:
        global father
        father = []

        # 初始化并查集
        def init(n: int):
            global father
            father = [i for i in range(n)]

        # 寻找本联通分量的根
        def find(node1: int):
            global father
            if node1 == father[node1]:
                return node1
            else:
                # 路径压缩
                father[node1] = find(father[node1])
                return father[node1]
        
        # 添加边 node1--node2
        def join(node1, node2):
            global father
            node1 = find(node1)
            node2 = find(node2)
            if node1 == node2:
                return
            else:
                father[node2] = node1

        init(n)
        
        for x, y in edges:
            join(x, y)
        
        return find(source) == find(destination)

标签:int,查集,father,算法,node1,顶点,node2,find
From: https://www.cnblogs.com/hifrank/p/18517499

相关文章

  • AdaBoost与前向分步算法
    1.加性模型的定义在AdaBoost算法中,我们可以将其视为一种加性模型。加性模型是指由多个基模型的线性组合构成的模型。图中的公式(10-9)描述了加性模型的形式:f(......
  • LUOGU_进阶算法思想
    进阶算法思想单调数据结构单调队列,单调栈都是均摊\(O(1)\),是不支持撤销的,只能按照正常过程加入。单调栈求最近的大于小于其的值CF280BMaximumXorSecondary:枚举最大值,次大值并不容易确定,但枚举次大值的位置,这样最大值就是其左右两边第一个比其大的值,用单调栈可求出。其实就......
  • PME算法简单Python实现
    技术背景在前面的两篇博客中,我们分别介绍了Ewald算法求解静电势能和基于格点拉格朗日插值法的PME算法。在多种计算优化算法(Ewald求和、快速傅里叶变换、格点拉格朗日插值、截断近似)的加持下,使得我们不需要在实空间进行大量的迭代,也可以得到一个近似收敛的静电势能结果。相关的PME......
  • 无监督异常检测算法
    1、概述无监督异常检测方法有重建类、特征类、流模型和教师学生网络这几种,之前了解过重建模型,重建模型大多采用VAE+Diffusion+Transformer类模型,对缺陷特征进行创建,本次总结主要分析特征类的鼻祖模型PatchCore,并找到其论文和源码,了解其工作原理的一些细节。图1描述了Pat......
  • 写分布式机器学习算法,哪种编程接口比较好
    写分布式机器学习算法,比较好的编程接口:1、Python;2、ApacheSpark;3、ApacheFlink;4、ApacheHadoop;5、TensorFlow。其中,Python是一种通用编程语言,广泛用于数据科学和机器学习领域。1、PythonPython是一种通用编程语言,广泛用于数据科学和机器学习领域。它具有简单易学、可读性......
  • 2024_10_30_2_hyperNeat进化神经网络算法
    原文地址:HyperNEATExplained:AdvancingNeuroevolutionExpandingNeuroEvolutionLastweek,IwroteanarticleaboutNEAT(NeuroEvolutionofAugmentingTopologies)andwediscussedalotofthecoolthingsthatsurroundedthealgorithm.Wealsobrieflytouc......
  • yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计(代码+教程)
    #多目标追踪+实例分割+目标检测YOLO(YouOnlyLookOnce)是一个流行的目标检测算法,它能够在图像中准确地定位和识别多个物体。在这里插入图片描述本项目是基于YOLO算法的目标跟踪系统,它将YOLO的目标检测功能与目标跟踪技术相结合,实现了实时的多目标跟踪。在目标......
  • 代码随想录算法训练营day31| 56. 合并区间 738.单调递增的数字
    学习资料:https://programmercarl.com/0056.合并区间.html#算法公开课贪心PART5over学习记录:56.合并区间(也是找重叠区间,但是是跟result[-1]比,只用比右边界;更新result[-1][1]为更大值)点击查看代码classSolution(object):defmerge(self,intervals):"""......
  • 代码随想录算法训练营第十二天| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大
    226.翻转二叉树题目链接:.-力扣(LeetCode)文章讲解:代码随想录视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树|LeetCode:226.翻转二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com......
  • 代码随想录算法训练营第十三天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子
    110.平衡二叉树题目链接:.-力扣(LeetCode)文章链接:代码随想录视频链接:后序遍历求高度,高度判断是否平衡|LeetCode:110.平衡二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com,这里刷题顺序,详......