zoukankan      html  css  js  c++  java
  • [USACO09OCT]热浪Heat Wave

    最短路的蒻弱化版,借着练了一遍dij堆优化的板子,放一个dij的标程在这吧。(真心感觉dij比某个已死算法敲着简单)

    堆优化部分:

    struct node
    {
        int u,v;
        bool operator <(const node &b)const
        {
            return u>b.u;
        }
    };
    priority_queue<node>q;

    核心程序

    void dijkstra()
    {
        for(int i=0;i<=n;i++) dis[i]=inf;
        dis[s]=0;
        node k;
        k.u=0;
        k.v=s;
        q.push(k);
        while(!q.empty())
        {
            int k=q.top().v,d=q.top().u;        
            q.pop();
            if(dis[k]!=d) continue;
            for(int i=head[k];i;i=ed[i].nxt)
            {
                if(dis[ed[i].to]>dis[k]+ed[i].val)
                {
                    dis[ed[i].to]=dis[k]+ed[i].val;
                    node p;
                    p.v=ed[i].to;
                    p.u=dis[p.v];
                    q.push(p);
                }
            }
        }
    }

    完整代码(规定起止点的dij)

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    #define maxn 100010
    #define inf 2120030207
    using namespace std;
    int head[maxn],dis[maxn],n,m,s,t,vis[maxn];
    struct noded
    {
        int nxt,to,val;
    }ed[maxn<<1];
    int cnt;
    void add(int x,int y,int z)
    {
        ed[++cnt].to=y;
        ed[cnt].nxt=head[x];
        head[x]=cnt;
        ed[cnt].val=z;
        swap(x,y);
        ed[++cnt].to=y;
        ed[cnt].nxt=head[x];
        head[x]=cnt;
        ed[cnt].val=z;
    }
    struct node
    {
        int u,v;
        bool operator <(const node &b)const
        {
            return u>b.u;
        }
    };
    priority_queue<node>q;
    void dijkstra()
    {
        for(int i=0;i<=n;i++) dis[i]=inf;
        dis[s]=0;
        node k;
        k.u=0;
        k.v=s;
        q.push(k);
        while(!q.empty())
        {
            int k=q.top().v,d=q.top().u;        
            q.pop();
            if(dis[k]!=d) continue;
            for(int i=head[k];i;i=ed[i].nxt)
            {
                if(dis[ed[i].to]>dis[k]+ed[i].val)
                {
                    dis[ed[i].to]=dis[k]+ed[i].val;
                    node p;
                    p.v=ed[i].to;
                    p.u=dis[p.v];
                    q.push(p);
                }
            }
        }
    }
    int main()
    {
        scanf("%d%d%d%d",&n,&m,&s,&t);
        for(int i=1,a,b,c;i<=m;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            add(a,b,c);
        }
        dijkstra();
        printf("%d
    ",dis[t]);
        return 0;
    }
  • 相关阅读:
    ubuntn16.04指令
    [Array]283. Move Zeroes
    spring框架
    Redis服务器搭建/配置/及Jedis客户端的使用方法
    [Java Performance] 数据库性能最佳实践
    iOS 序列化和反序列化
    SSH 获取GET/POST参数
    MAC中安卓开发环境的下载
    MAC OS下使用OpenSSL生成私钥和公钥的方法
    如何使用TestFlight进行Beta测试
  • 原文地址:https://www.cnblogs.com/charlesss/p/10742391.html
Copyright © 2011-2022 走看看