• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Swift]LeetCode1192.查找集群内的「关键连接」|CriticalConnectionsinaNetwork ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(www.zengqiang.org
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

There are n servers numbered from 0 to n-1 connected by undirected server-to-server connections forming a network where connections[i] = [a, b] represents a connection between servers a and b. Any server can reach any other server directly or indirectly through the network.

critical connection is a connection that, if removed, will make some server unable to reach some other server.

Return all critical connections in the network in any order.

 

Example 1:

Input: n = 4, connections = [[0,1],[1,2],[2,0],[1,3]]
Output: [[1,3]]
Explanation: [[3,1]] is also accepted.

 

Constraints:

  • 1 <= n <= 10^5
  • n-1 <= connections.length <= 10^5
  • connections[i][0] != connections[i][1]
  • There are no repeated connections.

力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号。

它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群,其中连接 connections 是无向的。

从形式上讲,connections[i] = [a, b] 表示服务器 a 和 b 之间形成连接。任何服务器都可以直接或者间接地通过网络到达任何其他服务器。

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

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

 

示例 1:

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

 

提示:

  • 1 <= n <= 10^5
  • n-1 <= connections.length <= 10^5
  • connections[i][0] != connections[i][1]
  • 不存在重复的连接

Runtime: 2832 ms
Memory Usage: 52.7 MB
 1 class Solution {
 2     var v:[[Int]] = [[Int]]()
 3     var dfn:[Int] = [Int]()
 4     var low:[Int] = [Int]()
 5     var times:Int = 0
 6     var ret:[[Int]] = [[Int]]()
 7     
 8     func criticalConnections(_ n: Int, _ connections: [[Int]]) -> [[Int]] {
 9         v = [[Int]](repeating:[Int](),count:n)
10         dfn = [Int](repeating:0,count:n)
11         low = [Int](repeating:0,count:n)
12         for e in connections
13         {
14             v[e[0]].append(e[1])
15             v[e[1]].append(e[0])
16         }
17         for i in 0..<n
18         {
19             if dfn[i] == 0
20             {
21                 tarjan(i, -1)
22             }
23         }
24         return ret
25     }
26     
27     func tarjan(_ x:Int,_ p:Int)
28     {
29         times += 1
30         dfn[x] = times
31         low[x] = times
32         for y in v[x]
33         {
34             if y == p {continue}
35             if dfn[y] == 0
36             {
37                 tarjan(y, x)
38                 low[x] = min(low[x], low[y])
39                 if low[y] > dfn[x]
40                 {
41                     ret.append([x, y])
42                 }
43             }
44             else
45             {
46                 low[x] = min(low[x], dfn[y])
47             }
48         }
49     }
50 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
iOS开发之Swift篇(1)—— 关于Swift发布时间:2022-07-13
下一篇:
swift5.x闭包发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap