Skip to content

Commit e61b0ce

Browse files
authored
Create 2045-second-minimum-time-to-reach-destination.js
1 parent 90bfb30 commit e61b0ce

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
const initializeGraph = (n) => {
2+
let G = []
3+
for (let i = 0; i < n; i++) {
4+
G.push([])
5+
}
6+
return G
7+
}
8+
const addEdgeToG = (G, Edges) => {
9+
for (const [u, v] of Edges) {
10+
G[u].push(v)
11+
G[v].push(u)
12+
}
13+
}
14+
/**
15+
* @param {number} n
16+
* @param {number[][]} edges
17+
* @param {number} time
18+
* @param {number} change
19+
* @return {number}
20+
*/
21+
const secondMinimum = (n, edges, time, change) => {
22+
let adj = initializeGraph(n + 1)
23+
addEdgeToG(adj, edges)
24+
let cost = initializeGraph(n + 1)
25+
let pq = new MinPriorityQueue({ priority: (x) => x[0] })
26+
pq.enqueue([0, 1])
27+
let green = 2 * change
28+
while (pq.size()) {
29+
let cur = pq.dequeue().element
30+
let [t, node] = cur
31+
if (cost[node].length == 2) continue
32+
let nextT =
33+
t % green < change ? t : (((t + green - 1) / green) >> 0) * green
34+
let cn = cost[node].length
35+
if (node == n) {
36+
if (cn == 0 || cost[node][cn - 1] != t) {
37+
cost[node].push(t)
38+
} else {
39+
continue
40+
}
41+
} else {
42+
if (cn == 0 || cost[node][cn - 1] != nextT) {
43+
cost[node].push(nextT)
44+
} else {
45+
continue
46+
}
47+
}
48+
for (const next_node of adj[node]) pq.enqueue([nextT + time, next_node])
49+
}
50+
return cost[n][1]
51+
}

0 commit comments

Comments
 (0)