Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func criticalConnections(n int, connections [][]int) [][]int {
- graph := make([][]int, n)
- time := make([]int, n)
- parTime := make([]int, n)
- par := make([]int, n)
- ret := make([][]int, 0)
- for i := range graph {
- graph[i] = make([]int, 0)
- time[i] = -1
- parTime[i] = -1
- }
- for i := range connections {
- graph[connections[i][0]] = append(graph[connections[i][0]], connections[i][1])
- graph[connections[i][1]] = append(graph[connections[i][1]], connections[i][0])
- }
- dfs(graph, time, parTime, par, 0, &ret)
- return ret
- }
- var t int = 0
- func dfs(graph [][]int, time[]int, parTime[]int, par[]int, src int, ret *[][]int) {
- t++
- time[src] = t
- parTime[src] = t
- for i := range graph[src] {
- if time[graph[src][i]] == -1 {
- par[graph[src][i]] = src
- dfs(graph, time, parTime, par, graph[src][i], ret)
- if parTime[graph[src][i]] > time[src] {
- *ret = append(*ret, []int{src, graph[src][i]})
- } else {
- if parTime[src] > parTime[graph[src][i]] {
- parTime[src] = parTime[graph[src][i]]
- }
- }
- } else if par[src] != graph[src][i] {
- if parTime[src] > time[graph[src][i]] {
- parTime[src] = time[graph[src][i]]
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement