题意分析
算法思路
基础题。将dijkstra中的路径和改为路径积,队列顺序变下即可。经典模板题。
代码实现
typedef pair<double,int> PDI;
class Solution {
public:
double maxProbability(int n, vector<vector<int>>& edges, vector<double>& succProb, int start, int end) {
vector<vector<PDI>> g(n);
for(int i=0;i<edges.size();i++){
auto &e=edges[i];
g[e[0]].emplace_back(succProb[i],e[1]);
g[e[1]].emplace_back(succProb[i],e[0]);
}
priority_queue<PDI,vector<PDI>,less<>> q;
q.emplace(1.0,start);
vector<double> dist(n,0);
while(!q.empty()){
auto [d,i]=q.top();q.pop();
if(dist[i]) continue;
dist[i]=d;
for(auto & [w,nxt]:g[i]){
if(dist[nxt]) continue;
q.emplace(d*w,nxt);
}
}
return dist[end];
}
};
解题总结
记好模板。