洛谷单源最短路径-----堆优化的dijkstra算法

题目链接:单源最短路径(标准版)

#include 
#include 
#include 
#include 
using namespace std;
int d[100005];
bool f[100005];
int head[100005],n,m,s,tot=0;
struct node
{
     
    int v,w,next;
}edge[200005];
struct tnode
{
     
    int v,dis;
};
void add(int u,int v,int w)
{
     
    edge[++tot].v=v;
    edge[tot].w=w;
    edge[tot].next=head[u];
    head[u]=tot;
}
bool operator < (tnode a,tnode b)
{
     
    return a.dis>b.dis;
}
priority_queue<tnode>q;
int main()
{
     
    int u,v,w;
    memset(d,0x3f,sizeof(d));
    cin>>n>>m>>s;
    d[s]=0;
    for(int i=1;i<=m;i++)
    {
     
        cin>>u>>v>>w;
        add(u,v,w);
    }
    q.push({
     s,0});
    while(!q.empty())
    {
     
        u=q.top().v;
        q.pop();
        if(f[u])continue;
        f[u]=true;
        for(int i=head[u];i;i=edge[i].next)
        {
     
            v=edge[i].v;
            if(d[v]>d[u]+edge[i].w)
            {
     
                d[v]=d[u]+edge[i].w;
                q.push({
     v,d[v]});
            }
        }
    }
    for(int i=1;i<=n;i++)
        cout<<d[i]<<' ';
    return 0;
}

你可能感兴趣的:(洛谷题解,算法,dijkstra)