leetcode:1192. 查找集群内的关键连接【tarjan模版 + 找割边】

news2025/2/6 5:49:21

目录

  • 题目截图
  • 题目分析
  • 割边
  • 割点
  • 强连通子图
  • ac code
  • tarjan模版
  • 总结

题目截图

在这里插入图片描述

题目分析

  • 找割边

割边

在这里插入图片描述

割点

在这里插入图片描述

强连通子图

  • 我觉得就是割边左右的两个子图?
  • 应该是去掉n条割边后,剩下n + 1个强连通子图的意思吧。。。

ac code

class Solution:
    def criticalConnections(self, n: int, connections: List[List[int]]) -> List[List[int]]:

        def check_graph(edge, n):
            # edge为边连接关系,n为节点数

            # 访问序号与根节点序号
            visit = [0] * n
            root = [0] * n
            # 割点
            cut_node = []
            # 割边
            cut_edge = []
            # 强连通分量子树
            sub_group = []

            # 中间变量
            stack = []
            index = 1

            def tarjan(i, father):
                nonlocal index
                visit[i] = root[i] = index
                index += 1
                stack.append(i)
                for j in edge[i]:
                    if j != father:
                        if not visit[j]:
                            tarjan(j, i)
                            root[i] = min(root[i], root[j])
                            if visit[i] < root[j]:
                                cut_edge.append([i, j])
                            if visit[i] < root[j]:
                                cut_node.append(i)
                        elif j in stack:
                            root[i] = min(root[i], visit[j])

                if root[i] == visit[i]:
                    lst = []
                    while stack[-1] != i:
                        lst.append(stack.pop())
                    lst.append(stack.pop())
                    r = min(root[ls] for ls in lst)
                    for ls in lst:
                        root[ls] = r
                    sub_group.append(lst)
                return

            for k in range(n):
                if not visit[k]:
                    tarjan(k, -1)
            return cut_edge, cut_node, sub_group

        edges = defaultdict(list)
        for a, b in connections:
            edges[a].append(b)
            edges[b].append(a)
        cut_edge, cut_node, sub_group = check_graph(edges, n)
        print(cut_node)
        return cut_edge

tarjan模版

        def check_graph(edge, n):
            # edge为边连接关系,n为节点数

            # 访问序号与根节点序号
            visit = [0] * n
            root = [0] * n
            # 割点
            cut_node = []
            # 割边
            cut_edge = []
            # 强连通分量子树
            sub_group = []

            # 中间变量
            stack = []
            index = 1

            def tarjan(i, father):
                nonlocal index
                visit[i] = root[i] = index
                index += 1
                stack.append(i)
                for j in edge[i]:
                    if j != father:
                        if not visit[j]:
                            tarjan(j, i)
                            root[i] = min(root[i], root[j])
                            if visit[i] < root[j]:
                                cut_edge.append([i, j])
                            if visit[i] < root[j]:
                                cut_node.append(i)
                        elif j in stack:
                            root[i] = min(root[i], visit[j])

                if root[i] == visit[i]:
                    lst = []
                    while stack[-1] != i:
                        lst.append(stack.pop())
                    lst.append(stack.pop())
                    r = min(root[ls] for ls in lst)
                    for ls in lst:
                        root[ls] = r
                    sub_group.append(lst)
                return

            for k in range(n):
                if not visit[k]:
                    tarjan(k, -1)
            return cut_edge, cut_node, sub_group
  • 输入:图g(defaultdict),总点数n
  • 输出:割边,割点,极大连通子图

总结

  • tarjan裸题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【愚公系列】2022年12月 .NET CORE工具案例-多语言离线翻译系统

文章目录前言1.在线翻译2.离线翻译一、多语言离线翻译系统1.开发环境2.准备离线翻译包3.准备python代码4.调试翻译结果5.Python翻译服务对接到.NET Core前言 1.在线翻译 在线翻译&#xff0c;一般是指在线翻译工具&#xff0c;如百度翻译、阿里翻译1688或Google翻译等。这类翻…

计算机毕业设计django基于python的在线教育平台

项目介绍 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,在线教育平台当然也不能排除在外。在线教育平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用django框架构建的一个管理系统。整个开发过程首…

fpga实操训练(小功能到模块开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 有过c、java编程语言经验的朋友&#xff0c;是否还记得曾经自己是如何学习编程语言的&#xff1f;一开始的时候&#xff0c;为了学习语法&#xff…

光电传感器调研报告

目录 前言&#xff1a; 一、理论基础——光电效应 二、光电传感器原理 三、光电元件 3.1光电管 3.2光敏电阻 四、光电传感器特性 4.1伏安特性 4.2光电特性 4.3光谱特性 五、光电传感器的应用 LED&#xff08;发光二极管&#xff09; 超声波传感器 光纤 六、总结 …

用Python赚钱的方法有哪些?

很多人想知道用Python赚钱的方法有哪些&#xff1f;Python很容易使用&#xff0c;应用性较强。可以通过使用Python开发小程序、抓取数据、游戏开发、兼职编程老师&#xff0c;发展副业的方式来赚钱。 用Python赚钱的方法&#xff1a; 1、某宝搜python程序   可以到某宝上搜&a…

中年人怎么转行做程序员,教你不怕年龄限制奔向高薪之路

网上很多人都说&#xff0c;人到了中年再去学编程已经来不及了&#xff0c;体力和精力都跟不上年轻人&#xff0c;做开发还要经常学习&#xff0c;然而中年人基本上有老下有小&#xff0c;根本没那么多时间去学习新技术&#xff0c;最重要的是&#xff0c;很多公司都有年龄限制…

学会这八个小技巧,让你软文推广更有效果!

软文营销已经出现在了我们的日常生活中&#xff0c;软文对于硬性的广告来说&#xff0c;具有独特的优势以及特殊性&#xff0c;受到了很多企业的青睐&#xff0c;其中还有一个重要的原因软文的花费是非常低的&#xff0c;适合一些中小型企业进行宣传推广,今天这篇文章就给大家讲…

vue学习笔记(五)-vuex

什么是vuex 1.概念&#xff1a;专门在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对Vue应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意组件间通信…

此时此刻此景,“零”就代表着赢

编辑 | 阿冒 设计 | 沐由2022卡塔尔世界杯&#xff0c;终于步入到最强、最美和最终的华章&#xff0c;阿根廷与法兰西共同上演了世界杯决赛史上的一幕奇迹&#xff0c;意想不到的转折和蹉跎而至的结局&#xff0c;让人不得不感慨全球第一运动的巨大魅力。在这种世界顶级水准…

统计学习方法 | 决策树

一.一棵有理想的树 分类决策树模型是一种描述对实例进行分类的树形结构 决策树是通过一系列规则对数据进行分类的过程 步骤 ①构建根节点 ②选择最优特征&#xff0c;以此分割训练数据集 ③若子集被基本正确分类&#xff0c;构建叶结点&#xff0c;否则&#xff0c;继续选…

java实验报告之模拟银行存取款业务

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2022.12.20 Last edited: 2022.12.20 目录 一、实验目的 二、实验内容 三、总体设计&#xff08;设计原理、设计方案及流程等&#xff09; 四…

医院导诊图怎么做,专业便捷、低成本的室内电子地图绘制平台!

目前的医院综合性强&#xff0c;面积大&#xff0c;科室多&#xff0c;布局复杂&#xff0c;病患在就医过程中&#xff0c;往往因为对医院各科室与区域分布不清晰而找不到方向&#xff0c;多走冤枉路&#xff0c;耗费时间&#xff0c;影响就医体验。上海懒图信息科技有限公司上…

轻量级网络模型MobileNet发展脉络(V1-V2-V3)

卷积神经网络发展 卷积神经网络被广泛应用在图像分类、目标检测等视觉任务中&#xff0c;并取得了巨大的成功。然而&#xff0c;卷积神经网络通常需要较大的运算量和内存占用&#xff0c;在移动端以及嵌入式设备等资源受限的环境中受到限制&#xff0c;因此需要进行网络压缩。从…

虹科案例 | 如何快速精准监测打桩机打桩深度?

想要精准测量打桩设备每个桩的测量深度&#xff0c;以正确设置多排电池板的太阳能农场&#xff1f;但是由于测量环境恶劣&#xff0c;导致普通传感器无法正常工作&#xff1f;那快了解一下我们的虹科Dimetix激光测距传感器吧&#xff0c;它可以完美解决上述问题&#xff01; 一…

NFC技术的特点与应用

NFC技术能给我们的生活带来极大的便利&#xff0c;能够用于乘车、购物、交换信息、刷门禁卡&#xff0c;可以说它能够应用到我们生活的方方面面。 但是&#xff0c;NFC到底是谁发明的&#xff1f;什么时候发明的&#xff1f;我们就来了解一下。 NFC的中文全称为近场通信技术&…

85%的攻击现在使用加密通道

©网络研究院 加密攻击仍然是全球各国面临的一个重大问题&#xff0c;美国、印度和日本的攻击数量在过去12个月中增长最快。 此外&#xff0c;与2021年相比&#xff0c;南非的TLS/SSL攻击显著增加。 Zscaler的安全研究和运营副总裁表示:“随着组织网络防御的成熟&#x…

22-12-19 西安 vue-cli(01) vue-cli脚手架、组件化编程、vue-router路由

"对A&#xff0c;我还剩一张牌啦&#xff01;" "呃。。。要不起" 周六&#xff08;12-03&#xff09;&#xff0c;早上刷到印度的三相神。梵天&#xff0c;毗湿奴&#xff0c;湿婆&#xff0c;看来很多个相关的视频介绍&#xff0c;结果睡觉&#xff08;不…

蓝桥杯题目类型总结

搜索类 BFS 大胖子走迷宫&#xff08;简单&#xff09;&#xff08;2019国赛&#xff09; 迷宫与陷阱&#xff1a;&#xff08;中等2018国赛&#xff09; 迷宫与陷阱&#xff1a;&#xff08;中等2018国赛&#xff09; 迷宫与陷阱&#xff1a;&#xff08;中等2018国赛&…

安卓PorterDuffXfermode之正片叠底 PorterDuff.Mode.MULTIPLY

setXfermode Paint#setXfermode()接口是在绘制时设置画笔的图形混合模式的,下面是官网的介绍&#xff1a; public Xfermode setXfermode (Xfermode xfermode) Set or clear the transfer mode object. A transfer mode defines how source pixels (generate by a drawing com…

three.js之旋转成型(车削缓冲几何体)

文章目录简介例子解释专栏目录请点击 简介 一条曲线围绕空间中的某个轴进行旋转&#xff0c;会形成一个几何体这个在three.js中也是可以实现的&#xff0c;主要就是使用到了three.js中的LatheGeometry&#xff0c;官网 例子 <!DOCTYPE html> <html lang"en&qu…