• 某算法的板子练习(四)


    堆优化dijkstra,在这个SPFA各种被卡的时代相当好用

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    using namespace std;
    
    inline int read()
    {
        int f=1,x=0;
        char ch=getchar();
        while(ch<'0' || ch>'9') {if(ch=='-') f=-1; ch=getchar();}
        while(ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    
    struct node
    {
        int nx,dis;
        bool operator < (const node a) const
        {
            return a.dis<dis;
        }
    }f[100005];
    
    priority_queue <node> q;
    
    int n,m,s;
    int cnt; 
    int head[100005],nxt[200005],v[200005],w[200005];
    bool book[100005];
    int i,j; 
    
    void add(int x,int y,int z)
    {
        v[++cnt]=y;
        w[cnt]=z;
        nxt[cnt]=head[x];
        head[x]=cnt;
    }
    
    int main()
    {
        n=read(); m=read(); s=read();
        int x,y,z;
        for(i=1;i<=m;i++)
        {
            x=read(); y=read(); z=read();
            add(x,y,z);
        }
        for(i=1;i<=n;i++) f[i].dis=0x7fffffff/2,f[i].nx=i;
        f[s].dis=0;
        q.push(f[s]);
        while(!q.empty())
        {
            x=q.top().nx; 
            q.pop();
            if(book[x]) continue;
            book[x]=1;
            for(i=head[x];i;i=nxt[i])
            {
                y=v[i];
                if(f[y].dis>f[x].dis+w[i])
                {
                    f[y].dis=f[x].dis+w[i];
                    if(!book[y]) q.push(f[y]);//这两句一定不能写反 
                }
            }
        }
        bool flag=0;
        for(i=1;i<=n;i++)
        {
            if(flag) printf(" ");
            printf("%d",f[i].dis);
            flag=1;
        }
        return 0;
    }

    ~NOIP2018 加油~

  • 相关阅读:
    心跳机制
    C++虚继承和虚基类
    STL,ATL与WTL
    C# Task的暂停与终止
    C#继承
    C#线程同步问题
    CourtAi发布配置文件修改说明
    阿里云虚拟主机https化步骤第一篇,申请证书(笔记)
    linux 服务器重启指令
    .net core 发布到iis问题 HTTP Error 500.30
  • 原文地址:https://www.cnblogs.com/llllllpppppp/p/9937339.html
Copyright © 2020-2023  润新知