🗒️1192. 查找集群内的关键连接
2025-1-15
| 2025-1-15
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Jan 15, 2025 07:45 AM
力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。它们之间以 服务器到服务器 的形式相互连接组成了一个内部集群,连接是无向的。用  connections 表示集群网络,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。
关键连接 是在该集群中的重要连接,假如我们将它移除,便会导致某些服务器无法访问其他服务器。
请你以任意顺序返回该集群内的所有 关键连接 。

Tarjan 算法

预备知识

对于一个无向图,如果删掉一条边后图中的连通分量数增加了,则称这条边为桥或者割边。严谨来说,就是:假设有连通图 , 是其中一条边(即 ),如果  是不连通的,则边  是图  的一条割边(桥)。

算法流程

求割点:
  1. 首先,我们按照 DFS 的顺序给图中的每个点打上时间戳(访问的顺序);
      • 时间戳:表示节点第一次被访问的编号,存在 dfn 数组中
      • 追溯值:表示不经过其父亲能到达的最小的时间戳,存在 low 数组中
  1. 然后,我们开始 DFS,我们判断某个点是否是割点的根据是:对于某个顶点 ,如果存在至少一个顶点 的儿子),使得 ,即不能回到祖先,那么 为割点。
求割边:和割点差不多,只要改一处: (去掉等于号)就可以了,而且不需要考虑根节点的问题。

📎 参考

 
  • 【题单】图论算法
  • 3370. 仅含置位位的最小整数753. 破解保险箱
    Loading...