Leetcode 1192. 查找集群内的关键连接

news/2024/10/12 12:47:50

1.题目基本信息

1.1.题目描述

力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。它们之间以 服务器到服务器 的形式相互连接组成了一个内部集群,连接是无向的。用 connections 表示集群网络,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。

关键连接 是在该集群中的重要连接,假如我们将它移除,便会导致某些服务器无法访问其他服务器。

请你以任意顺序返回该集群内的所有 关键连接 。

1.2.题目地址

https://leetcode.cn/problems/critical-connections-in-a-network/description/

2.解题方法

2.1.解题思路

tarjan计算无向图中桥的个数

2.2.解题步骤

构建tarjan算法的模板,构建图graph,然后获取桥即可,详情请看代码中的注释。

3.解题代码

Python代码

from typing import List
# ==> 无向图的Tarjan算法模板,参数为邻接表,可以获取割点状态、桥、各节点的当前时间戳和子孙节点最小时间戳
class UndirectedGraphTarjan():def __init__(self,graph:List[List[int]]):self.graph=graphself.length=len(self.graph)self.dfn=[-1]*self.length   # dfn为各个节点的访问时间戳self.low=[-1]*self.length   # low为各个节点的子孙节点中最小时间戳self.cutPoint=[False]*self.length   # 各个节点的割点状态self.bridges=[]self.timestamp=0    # 时间戳,初始化为0,且保证唯一# tarjanDfs任务:设置node节点的访问时间戳、子孙节点最小访问时间戳、node的割点状态def tarjanDfs(self,node:int,father:int):# 注意:割点和桥针对无向图,如果图是有向的,则考虑算强连通算法的个数即可(算low中相同的个数即可)# 割点条件:条件1:节点node非root+有儿子,同时dfn(node)<=low(node) / 条件2:节点node是root+非连通儿子节点数大于等于2# 桥的条件:dfn(node)<low(child)# 标记当前节点的访问时间戳并初始化子孙节点中最小的访问时间戳self.dfn[node]=self.timestampself.low[node]=self.timestampself.timestamp+=1childCnt=0for child in self.graph[node]:# 如果子节点等于父节点,跳过,否则反复执行father的dfs任务,造成错误if child!=father:# 如果孩子节点没有访问过if self.dfn[child]==-1:childCnt+=1self.tarjanDfs(child,node)  # 设立设置子节点的dfn、low、割点状态# 割点条件1if father!=-1 and self.dfn[node]<=self.low[child] and not self.cutPoint[node]:self.cutPoint[node]=True# 桥的条件if self.dfn[node]<self.low[child]:self.bridges.append([node,child])# 设置node节点的子孙节点中的最小时间戳self.low[node]=min(self.low[node],self.low[child])# 割点条件2if father==-1 and childCnt>=2 and not self.cutPoint[node]:self.low[node]=Trueclass Solution:def criticalConnections(self, n: int, connections: List[List[int]]) -> List[List[int]]:# 构建图graph=[[] for _ in range(n)]for x,y in connections:graph[x].append(y)graph[y].append(x)# targen算法获取无向图的桥ugTarjan=UndirectedGraphTarjan(graph)ugTarjan.tarjanDfs(0,-1)return ugTarjan.bridges

4.执行结果

在这里插入图片描述

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

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

相关文章

查看Github 发行版下载次数

比如我在Github上开源了软件,并且在Release里面发布了版本,但是Github release页面并没有下载统计次数的页面展示。下面列举的几个可以查看Release各个版本的下载量。1. https://somsubhra.github.io/github-release-stats/?username=hupo376787&repository=WeiboAlbumD…

K8S控制器理解-摘录自《云原生操作系统Kubernetes》

摘录自罗建龙等著的《云原生操作系统Kubernetes》,详细了解请查看原著。虽然控制器是Kubernetes比较复杂的组件,但是控制器这个概念本身,对我们来说并不陌生。我们生活中使用的洗衣机、冰箱、空调等,都要有控制器才能正常工作。 以下我们通过思考一个简易冰箱的设计过程,来…

ABAP面向对象视频课程 语法篇 共26节(SAP开发)

ABAP面向对象视频课程上线B站了,感兴趣的小伙伴可以去试看一下~ 课程地址:https://www.bilibili.com/cheese/play/ss33355?bsource=link_copy

【日记】强烈地意识到了:她对我而言,真的很重要

写在前面2164 字 | 情感内容 | 亲密关系 | HSP | 暴言注意正文最安静的一集。今天所有客户经理都出差去了。一楼只有我、柜面主管、前台和门卫四个人。两个小时没人说一句话。社恐天堂。工作上没什么好说的。中午明明人很少,但是食堂阿姨做了很多菜,就很奇怪。虽这么说,倒是…

ORCLE与MySQL的相互转化

1.情景展示 在实际开发中,不同的地方可能所需使用的数据库是不同的。 这就要求,我们开发的程序需要兼容不同的数据库,放到程序里面就是: 需要有不同类型的sqlMap文件。以既要兼容MySQL,也要兼容Oracle进行举例说明。 2.准备工作 第一步 根据已经写好的一套sql进行复制,然…

【解决方案】Sublime Text 4 按下 Esc 键后无法输入任何内容

在最后编辑博客内容时,我的 Sublime 版本为 4180。我基本用 Sublime Text 4 替代了系统自带的 Notepad,我用它编辑任何东西(除了代码,手动狗头)。 开始我怀疑是 Package Control 安装了过多依赖导致的兼容性问题,但由于 Sublime 多次更新,我的 Package Control 再次从命…

dirxk轻量目录扫描器

公司找个一个外包团队给客户写了一套系统,存在一些敏感信息泄露漏洞,这些漏洞不定期被主管部门检测到,从而需要进行整改操作 项目经理求助于公司内部的安全团队,希望能够检测系统还存在哪些敏感信息泄露漏洞,至此形成了本文中的一个主因 在实际的检测过程中,发现御剑、DI…

推荐一款支持Vue3的管理系统模版:Vue-Vben-Admin

近年来,随着前端技术的飞速发展,各类后台管理系统框架层出不穷。Vue 作为热门的前端框架,也有许多优秀的后台模板涌现。而 Vue-Vben-Admin,凭借其高效、灵活的架构设计和完善的功能体系,成为了许多前端开发者的不二选择。其Github Star达到了24K之多,可见其受欢迎程度。本…