Skip to content

Commit 87f0ddc

Browse files
authored
Update 1514.Path-with-Maximum-Probability_dijkstra.cpp
1 parent 31409a5 commit 87f0ddc

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,39 @@
11

2+
class Solution {
3+
public:
4+
double maxProbability(int n, vector<vector<int>>& edges, vector<double>& succProb, int start, int end)
5+
{
6+
vector<vector<pair<int, double>>>Next(n);
7+
for (int i=0; i<edges.size(); i++)
8+
{
9+
Next[edges[i][0]].push_back({edges[i][1], -log(succProb[i])});
10+
Next[edges[i][1]].push_back({edges[i][0], -log(succProb[i])});
11+
}
12+
13+
set<tuple<double, int>>Set; // {dist, node}
14+
Set.insert({0, start});
15+
vector<double>prob(n,-1);
16+
17+
while (!Set.empty())
18+
{
19+
double dist = get<0>(*Set.begin());
20+
int curNode = get<1>(*Set.begin());
21+
Set.erase(Set.begin());
22+
23+
if (prob[curNode]!=-1) continue;
24+
prob[curNode] = dist;
25+
26+
if (curNode==end) return exp(-prob[curNode]);
27+
28+
for (auto next: Next[curNode])
29+
{
30+
int nextNode = next.first;
31+
double edge = next.second;
32+
if (prob[nextNode]!=-1) continue;
33+
Set.insert({dist + edge, nextNode});
34+
}
35+
}
36+
37+
return 0;
38+
}
39+
};

0 commit comments

Comments
 (0)