1514. Path with Maximum Probability
https://leetcode.com/problems/path-with-maximum-probability/



Last updated
https://leetcode.com/problems/path-with-maximum-probability/



Last updated
Input: n = 3, edges = [[0,1],[1,2],[0,2]], succProb = [0.5,0.5,0.2], start = 0, end = 2
Output: 0.25000
Explanation: There are two paths from start to end, one having a probability of success = 0.2 and the other has 0.5 * 0.5 = 0.25.Input: n = 3, edges = [[0,1],[1,2],[0,2]], succProb = [0.5,0.5,0.3], start = 0, end = 2
Output: 0.30000Input: n = 3, edges = [[0,1]], succProb = [0.5], start = 0, end = 2
Output: 0.00000
Explanation: There is no path between 0 and 2.from heapq import heappush, heappop
class Solution:
def maxProbability(self, n: int, edges: List[List[int]], succProb: List[float], start: int, end: int) -> float:
p, g = [0.0] * n, collections.defaultdict(list)
for i, (a, b) in enumerate(edges):
g[a].append((b, succProb[i]))
g[b].append((a, succProb[i]))
p[start] = 1
heap = [(-p[start], start)]
while heap:
prob, cur = heappop(heap)
if cur == end: return -prob
for nei, e_prob in g[cur]:
cand_prob = -prob * e_prob
if cand_prob > p[nei]:
p[nei] = cand_prob
heappush(heap, (-p[nei], nei))
return 0