There are n servers numbered from 0 to n - 1 connected by undirected server-to-server connections forming a network where connections[i] = [ai, bi] represents a connection between servers ai and bi. Any server can reach other servers directly or indirectly through the network.
A critical connection is a connection that, if removed, will make some servers 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.
Example 2:
Input: n = 2, connections = [[0,1]]
Output: [[0,1]]
Constraints:
2 <= n <= 105
n - 1 <= connections.length <= 105
0 <= ai, bi <= n - 1
ai != bi
There are no repeated connections.
Intuition
Approach:
Maintain two arrays , start time and low(tracking lowest timre it can reach)
Traverse,
Whenever the low[adjacent node] > starttime[parent]
Bridge
Intuition is that,
2
/ \
1 ----3 -- 4
(start_time, low)
We start Dfs from 1(1,1) -> 2(2,2) -> 3(3,3) -> 2
Now we reach 2 but dfs over here, we update low of 3
Lowest 3 can be reach 2
3(3,2) -> 4(4,4)
Now low(4) > start[3] hence, it means 4 was visited at time 4
But 3 was visited at strating 3, can hence 4 cannot reach 3, hence bridge