leetcode

Solution to some Leetcode problems written in C++
git clone git://git.dimitrijedobrota.com/leetcode.git
Log | Files | Refs | README | LICENSE

1514.cpp (1111B)


0 class Solution {
1 typedef tuple<double, int> edge;
3 public:
4 double maxProbability(int n, const vector<vector<int>> &edges, const vector<double> &succProb, int start,
5 int end) {
6 vector<vector<edge>> adj(n);
7 vector<bool> visited(n, false);
8 vector<double> dist(n, 0);
9 priority_queue<edge> pq;
11 for (int i = 0; i < succProb.size(); i++) {
12 adj[edges[i][0]].push_back({succProb[i], edges[i][1]});
13 adj[edges[i][1]].push_back({succProb[i], edges[i][0]});
14 }
16 pq.push({dist[start] = 1.0, start});
17 while (n && !pq.empty()) {
18 auto [w, dest] = pq.top();
19 pq.pop();
20 if (visited[dest]) continue;
21 if (dest == end) return w;
22 visited[dest] = true;
23 for (const auto &[pw, pd] : adj[dest]) {
24 if (!visited[pd] && dist[dest] * pw > dist[pd]) {
25 dist[pd] = dist[dest] * pw;
26 pq.push({dist[pd], pd});
27 }
28 }
29 n--;
30 }
32 return 0;
33 }
34 };