Dijkstra is usually for "Minimum Sum". Can you use it for "Maximum Product"? Yes! The greedy logic still holds. You want to pick the "best" path so far. Changes:
dist array becomes prob array. Initialize to (or ).
prob[start] = (% chance to start).
Priority Queue should return the Largest value (Max-Heap). (So use the default priority_queue, no greater needed).
Relaxation: if (prob[u] * w > prob[v]) prob[v] = prob[u] * w;