This is my solution for question Path with Maximum Probability(Weekly Contest 197 Question 3)
'''
class Solution {
public:
unordered_map<int,vector<pair<int,double>>> m;
map<int,double> dp;
map<pair<int,int>,double> cost;
set< int > vis;
double maxProbability(int n, vector<vector>& edges, vector& succProb, int start, int end) {
dp.clear();
m.clear();
cost.clear();
vis.clear();
for(int i=0;i<edges.size();i++){
m[edges[i][0]].push_back({edges[i][1],succProb[i]});
m[edges[i][1]].push_back({edges[i][0],succProb[i]});
}
double ans=returnmaxprobability(n,start,end);
return ans;
}
double returnmaxprobability(int n,int start,int end){
if(start==end) return 1;
if(vis.count(start)!=0) return 0;
if(dp.count(start)!=0)return dp[start];
double maxcost=0;
vis.insert(start);
for(int i=0;i<m[start].size();i++){
maxcost=max(maxcost,returnmaxprobability(n,m[start][i].first,end)*m[start][i].second);
}
vis.erase(start);
return dp[start]=maxcost;
}
};
'''