class Solution {
public:
double maxProbability(int n, vector<vector<int>>& edges, vector<double>& s, int start, int end) {
vector<pair<double,int>> e[n];
vector<int> vis(n,0);
for (int i = 0;i < edges.size();i++)
{
e[edges[i][0]].push_back({s[i],edges[i][1]});
e[edges[i][1]].push_back({s[i],edges[i][0]});
}
vector<double> dis(n+1,0);
priority_queue<pair<double,int>> q;//默认从大到小排序
dis[start] = 1;
q.push({1.0,start});
while(!q.empty()){
auto [p,u] = q.top();
q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(auto [p,v] : e[u]){
dis[v] = max(dis[v],dis[u]*p);
if(!vis[v]) q.push({dis[v],v});
}
}
return dis[end];
}
};