zoukankan      html  css  js  c++  java
  • 洛谷 P4779 单源最短路径(标准版) 题解

    题面

    这道题就是标准的堆优化dijkstra;

    注意堆优化的dijkstra在出队时判断vis,而不是在更新时判断vis

    #include <bits/stdc++.h>
    using namespace std;
    int n,m,s;
    struct littlestar{
        int to;
        int nxt;
        int w;
    }star[400000];
    int head[400000],cnt;
    void add(int u,int v,int w)
    {
        star[++cnt].to=v;
        star[cnt].w=w;
        star[cnt].nxt=head[u];
        head[u]=cnt;
    }
    int dis[400000],vis[400000];
    priority_queue<pair<int,int> > q;
    void dijkstra(int u)
    {
        memset(dis,0x3f,sizeof(dis));
        dis[u]=0;
        q.push(make_pair(0,u));
        while(q.size())
        {
            int x=q.top().second;
            q.pop();
            if(vis[x]) continue;
            vis[x]=1;
            for(int i=head[x];i;i=star[i].nxt){
                int v=star[i].to;        
                if(dis[v]>dis[x]+star[i].w){
                    dis[v]=dis[x]+star[i].w;
                    q.push(make_pair(-dis[v],v));
                }
            }
        }
    }
    int main ()
    {
        scanf("%d%d%d",&n,&m,&s);
        for(int i=1;i<=m;i++){
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            add(u,v,w);
        }
        dijkstra(s);
        for(int i=1;i<=n;i++){
            cout<<dis[i]<<" ";
        }
    }
  • 相关阅读:
    EXE中释放文件
    关闭GS选项,解决注入后崩溃
    HDU2516 取石子游戏
    HDU2188 选拔志愿者
    HDU2149 Public Sale
    HDU2147 kiki's game
    HDU1846 Brave Game
    LightOJ1214 Large Division
    POJ2480 Longge's problem
    HDU 5880 Family View
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11331267.html
Copyright © 2011-2022 走看看