Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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
Lines changed: 62 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /