Skip to content

Commit a096f7e

Browse files
authored
Create 2858-minimum-edge-reversals-so-every-node-is-reachable.js
1 parent 6adb4b1 commit a096f7e

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
* @param {number} n
3+
* @param {number[][]} edges
4+
* @return {number[]}
5+
*/
6+
const minEdgeReversals = function (n, edges) {
7+
let edgesMap = {}
8+
for (let i = 0; i < edges.length; i++) {
9+
let a = edges[i][0]
10+
let b = edges[i][1]
11+
if (edgesMap[a] === undefined) {
12+
edgesMap[a] = []
13+
}
14+
//its a forward edge
15+
edgesMap[a].push([b, 'f'])
16+
if (edgesMap[b] === undefined) {
17+
edgesMap[b] = []
18+
}
19+
//its a revers edge
20+
edgesMap[b].push([a, 'r'])
21+
}
22+
23+
//We can cosnider any node as root node, Here I choose node 0
24+
let res = bfs(0)
25+
let ans = []
26+
ans[0] = res[0]
27+
let dist = res[1]
28+
for (let i = 1; i < n; i++) {
29+
//Ans for rest of the node will be, distance from node to root + answer of root
30+
ans[i] = dist[i][0] - dist[i][1] + ans[0]
31+
}
32+
33+
return ans
34+
function bfs(root) {
35+
let distance = [],
36+
visited = [],
37+
totalReversal = 0
38+
let queue = []
39+
queue.push([root, 0, 0])
40+
distance[root] = [0, 0]
41+
visited[root] = true
42+
while (queue.length > 0) {
43+
let nextLevelQueue = []
44+
for (let i = 0; i < queue.length; i++) {
45+
let node = queue[i][0]
46+
let weightF = queue[i][1]
47+
let weightR = queue[i][2]
48+
for (let j = 0; j < edgesMap[node].length; j++) {
49+
let neighbour = edgesMap[node][j][0]
50+
if (visited[neighbour] !== undefined) {
51+
continue
52+
}
53+
let type = edgesMap[node][j][1]
54+
let f = weightF,
55+
r = weightR
56+
if (type === 'r') {
57+
totalReversal += 1
58+
r++
59+
} else {
60+
f++
61+
}
62+
visited[neighbour] = true
63+
distance[neighbour] = [f, r]
64+
nextLevelQueue.push([neighbour, f, r])
65+
}
66+
}
67+
queue = nextLevelQueue
68+
}
69+
return [totalReversal, distance]
70+
}
71+
}

0 commit comments

Comments
 (0)