目录

1192:查找集群内的关键连接(2084 分)

力扣第 154 场周赛第 4 题

题目

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

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

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

示例 1:

输入:n = 4, connections = [[0,1],[1,2],[2,0],[1,3]]
输出:[[1,3]]
解释:[[3,1]] 也是正确的。

示例 2:

输入:n = 2, connections = [[0,1]]
输出:[[0,1]]

提示:

  • 2 <= n <= 105
  • n - 1 <= connections.length <= 105
  • 0 <= ai, bi <= n - 1
  • ai != bi
  • 不存在重复的连接

分析

tarjan 算法模版题,求无向图的桥

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution:
    def criticalConnections(self, n: int, connections: List[List[int]]) -> List[List[int]]:
        def tarjan(u,fa):
            nonlocal t
            dfn[u]=low[u]=t=t+1
            for v in g[u]:
                if not dfn[v]:
                    tarjan(v,u)
                    low[u] = min(low[u],low[v])
                    if low[v]>dfn[u]:
                        bridge.append([u,v])
                elif v!=fa:
                    low[u] = min(low[u],dfn[v])
        g = [[] for _ in range(n)]
        for u,v in connections:
            g[u].append(v)
            g[v].append(u)
        dfn,low,t = [0]*n,[0]*n,0
        bridge = []
        tarjan(0,-1)
        return bridge

348 ms