Leetcode 1514. The most probable path Dijkstra+modification+optimization

Original title link: Leetcode 1514. The most probable path
insert image description here
insert image description here
insert image description here

class Solution {
    
    
public:
    struct cmp
    {
    
    
        bool operator() (const pair<int,double>& a,const pair<int,double>& b)
        {
    
    
            return a.second<b.second;
        }
    };
    vector<double> d;
    vector<int> visit;
    vector<vector<pair<int,double>>> adj;
    priority_queue<pair<int,double>,vector<pair<int,double>>,cmp> pq;
    void dijkstra(int t,int n)
    {
    
    
        d[t]=1;
        pq.push({
    
    t,1});
        while(!pq.empty())
        {
    
    
            auto tmp=pq.top(); pq.pop();
            int u=tmp.first;
            if(visit[u]) continue;
            double p=tmp.second;
            visit[u]=1;
            for(auto x:adj[u])
            {
    
    
                if(!visit[x.first])
                {
    
    
                    if(d[x.first]<d[u]*x.second) 
                    {
    
    
                        d[x.first]=d[u]*x.second;
                        pq.push({
    
    x.first,d[x.first]});
                    }
                }
            }
        }
    }
    double maxProbability(int n, vector<vector<int>>& edges, vector<double>& succProb, int start, int end) {
    
    
        d.resize(n);
        adj.resize(n);
        visit.resize(n);
        int edgenum=edges.size();
        for(int i=0;i<edgenum;i++)
        {
    
    
            int a=edges[i][0],b=edges[i][1];
            double p=succProb[i];
            adj[a].push_back({
    
    b,p});
            adj[b].push_back({
    
    a,p});
        }
        dijkstra(start,n);
        return d[end]; 
    }
};

Guess you like

Origin blog.csdn.net/qq_45791939/article/details/128026160