zoukankan      html  css  js  c++  java
  • POJ 3255_Roadblocks

    题意:

    无向图,求单源次短路,每条边可以走多次。

    分析:

    对于每个点记录最短路和次短路,次短路可以是由最短路+边或者是次短路+边更新而来。在更新每个点的最短路时,相应更新次短路,如果最短路更新了,就令次短路等于原来的最短路,如果没有,就看能否直接更新次短路。

    代码:

    #include<iostream>
    #include<queue>
    #include<cstdio>
    using namespace std;
    #define se second
    #define fi first
    typedef pair<int, int>pii;
    struct edge{int to,w,next;};
    const int maxm = 200010, maxn = 5005, INF = 0x3fffffff;
    edge e[maxm];
    int n,R;
    int head[maxn], d[maxn], d2[maxn];
    int dijkstra()
    {
        priority_queue<pii,vector<pii>,greater<pii> > q;
        q.push(pii(0,1));
        fill(d, d+n+1, INF);
        fill(d2, d2+n+1, INF);
        d[1] = 0;
        while(!q.empty()){
            pii tmp = q.top();q.pop();
            int ne = head[tmp.se];
            while(ne!=-1){
                int v = e[ne].to;
                int di = e[ne].w+tmp.fi;
                int temp =di;
                if(d[v] > di){
                    temp = d[v];
                     d[v]=di;
                     q.push(make_pair(d[v],v));
                }
                if(d2[v] > temp){
                    d2[v] = temp;
                    q.push(make_pair(d2[v],v));
                }
                ne = e[ne].next;
            }
        }
        return d2[n];
    }
    int main (void)
    {
        scanf("%d%d",&n,&R);
        int a, b, di;
        fill(head, head+n+1,-1);
        for(int i = 0; i < 2 * R; i++){
           scanf("%d%d%d",&a,&b,&di);
            e[i].to = b, e[i].w = di;
            e[i].next = head[a];
            head[a] = i++;
            e[i].to = a, e[i].w = di;
            e[i].next = head[b];
            head[b] = i;
        }
        printf("%d
    ",dijkstra());
    }
    

    看discuss有人说是道大水题,可是我感觉还不是很好想,可能还是对算法本身理解不彻底掌握不扎实吧。

  • 相关阅读:
    shell编程-基础
    磁盘管理-下部
    磁盘管理-中部
    磁盘管理-上部
    用户的管理
    docker之阿里云centos 7.x 启动容器报错处理办法
    IDEA之整合SVN遇到的坑(一)
    springboot之通过idea打jar包并运行
    SpringBoot整合定时任务和异步任务处理
    Microsoft SQL Server 2012安装说明
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758804.html
Copyright © 2011-2022 走看看