Dijkstra+set堆优化局部模板

这是某天2018-10-25写的某题(P1613-luogu)的局部代码,目的是方便自己记忆一些细节,所以这里不过多赘述算法原理或题目

邻接矩阵mapp表示有向图

struct ELE
{
    int i,num;
    bool operator<(const ELE &a)const
    {
        return num<a.num;
    }
};
//.....
int dijkstra()
{
    qu.insert((ELE){1,0});
    memset(dis,127,sizeof(dis));
    dis[1]=0;
    while(!qu.empty())
    {
        ELE a=*qu.begin();qu.erase(qu.begin());
        for(int i=1;i<=n;i++)
        {
            if(mapp[a.i][i]&&mapp[a.i][i]+dis[a.i]<dis[i])
            {
                qu.erase((ELE){i,dis[i]});
                dis[i]=mapp[a.i][i]+dis[a.i];
                qu.insert((ELE){i,dis[i]});
            }
        }
    }
    return dis[n];
}

 

posted @ 2018-10-25 16:41  cckk4467  阅读(308)  评论(0)    收藏  举报