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 算法
预备知识
对于一个无向图,如果删掉一条边后图中的连通分量数增加了,则称这条边为桥或者割边。严谨来说,就是:假设有连通图 , 是其中一条边(即 ),如果 是不连通的,则边 是图 的一条割边(桥)。
算法流程
求割点:
- 首先,我们按照 DFS 的顺序给图中的每个点打上时间戳(访问的顺序);
- 时间戳:表示节点第一次被访问的编号,存在
dfn
数组中 - 追溯值:表示不经过其父亲能到达的最小的时间戳,存在
low
数组中
- 然后,我们开始 DFS,我们判断某个点是否是割点的根据是:对于某个顶点 ,如果存在至少一个顶点 ( 的儿子),使得 ,即不能回到祖先,那么 为割点。
求割边:和割点差不多,只要改一处: (去掉等于号)就可以了,而且不需要考虑根节点的问题。