Skip to content

Commit 68ba830

Browse files
author
hasibulislam999
committed
Minimum Weighted Subgraph with the Required Paths problem solved
1 parent b519ff6 commit 68ba830

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/**
2+
* Title: Minimum Weighted Subgraph with the Required Paths
3+
* Description: You are given an integer n denoting the number of nodes of a weighted directed graph. The nodes are numbered from 0 to n - 1.
4+
* Author: Hasibul Islam
5+
* Date: 04/05/2023
6+
*/
7+
8+
/**
9+
* @param {number} n
10+
* @param {number[][]} edges
11+
* @param {number} src1
12+
* @param {number} src2
13+
* @param {number} dest
14+
* @return {number}
15+
*/
16+
var minimumWeight = function (n, edges, src1, src2, dest) {
17+
var paths = new Array(n).fill(0).map((i) => []);
18+
var reversePaths = new Array(n).fill(0).map((i) => []);
19+
for (var edge of edges) {
20+
var [u, v, w] = edge;
21+
paths[u].push([v, w]);
22+
reversePaths[v].push([u, w]);
23+
}
24+
25+
var dijkstra = function (start, paths) {
26+
var visited = [];
27+
var dp = new Array(n).fill(Number.MAX_SAFE_INTEGER);
28+
dp[start] = 0;
29+
30+
var pq = new MinPriorityQueue({ priority: (item) => item[1] });
31+
pq.enqueue([start, 0]);
32+
33+
while (!pq.isEmpty()) {
34+
var [u, cost] = pq.dequeue().element;
35+
if (visited[u] || cost > dp[u]) continue;
36+
visited[u] = true;
37+
for (var path of paths[u]) {
38+
var [v, w] = path;
39+
if (dp[v] > dp[u] + w) {
40+
dp[v] = dp[u] + w;
41+
pq.enqueue([v, dp[v]]);
42+
}
43+
}
44+
}
45+
46+
return dp;
47+
};
48+
49+
var dpStartFromSrc1 = dijkstra(src1, paths);
50+
var dpStartFromSrc2 = dijkstra(src2, paths);
51+
var dpStartFromDesc = dijkstra(dest, reversePaths);
52+
53+
var ans = Number.MAX_SAFE_INTEGER;
54+
for (var i = 0; i < n; i++) {
55+
ans = Math.min(
56+
ans,
57+
dpStartFromSrc1[i] + dpStartFromSrc2[i] + dpStartFromDesc[i]
58+
);
59+
}
60+
61+
return ans === Number.MAX_SAFE_INTEGER ? -1 : ans;
62+
};

0 commit comments

Comments
 (0)