Skip to content

Commit 6304fe8

Browse files
author
hasibulislam999
committed
Number of Restricted Paths from First to Last Node problem solved
1 parent f0c9a60 commit 6304fe8

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* Title: Number of Restricted Paths from First to Last Node
3+
* Description: There is an undirected weighted connected graph. You are given a positive integer n which denotes that the graph has n nodes labeled from 1 to n, and an array edges where each edges[i] = [ui, vi, weighti] denotes that there is an edge between nodes ui and vi with weight equal to weighti.
4+
* Author: Hasibul Islam
5+
* Date: 04/05/2023
6+
*/
7+
8+
/**
9+
* @param {number} n
10+
* @param {number[][]} edges
11+
* @return {number}
12+
*/
13+
var countRestrictedPaths = function (n, edges) {
14+
const g = Array.from({ length: n + 1 }, () => []);
15+
for (let [a, b, c] of edges) {
16+
g[a].push([b, c]);
17+
g[b].push([a, c]);
18+
}
19+
// do dijkstras to find shortest path from n to all nodes
20+
const dis = new Array(n + 1).fill(Infinity);
21+
dis[n] = 0;
22+
const dijkstra = () => {
23+
const heap = new MinPriorityQueue({ priority: (x) => x[1] });
24+
heap.enqueue([n, 0]);
25+
while (heap.size()) {
26+
const [node, cost] = heap.dequeue().element;
27+
for (let [nextNode, w] of g[node]) {
28+
const totalCost = cost + w;
29+
if (dis[nextNode] > totalCost) {
30+
dis[nextNode] = totalCost;
31+
heap.enqueue([nextNode, totalCost]);
32+
}
33+
}
34+
}
35+
};
36+
dijkstra();
37+
38+
// do dfs from 1 having path always lesser dist
39+
let rPaths = 0;
40+
const MOD = 1000000007;
41+
const dp = new Array(n + 1).fill(-1);
42+
const dfs = (curr = 1, rCost = dis[1]) => {
43+
if (curr == n) return 1;
44+
if (dp[curr] != -1) return dp[curr];
45+
46+
let op = 0;
47+
for (let [n, w] of g[curr]) {
48+
if (dis[n] < rCost) {
49+
op = (op + dfs(n, dis[n])) % MOD;
50+
}
51+
}
52+
53+
return (dp[curr] = op);
54+
};
55+
return dfs();
56+
};

0 commit comments

Comments
 (0)