【洛谷】P2865 [USACO06NOV]路障Roadblocks (次短路)

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。【洛谷】P2865 [USACO06NOV]路障Roadblocks (次短路),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

链接

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int MAXN=1926817,MAXM=7186291,INF=2147483647;
struct Edge{
    int to,Next,v;
}e[MAXM];
int n,m,s,front[MAXN],cnt,t,d1[MAXN],d2[MAXN];
inline void insert(int u,int v,int w){
    ++cnt;e[cnt].to=v;e[cnt].v=w;e[cnt].Next=front[u];front[u]=cnt;
}
void JuPaFA(int s,int *d){
    int inq[MAXN];
    queue<int>q;
    memset(inq,0,sizeof(inq));
    inq[s]=1;q.push(s);d[s]=0;
    while(!q.empty()){
        int u=q.front();
        q.pop();inq[u]=0;
        for(int i=front[u];i>=0;i=e[i].Next){
            int v=e[i].to,w=e[i].v;
            if(d[v]>d[u]+w){
                d[v]=d[u]+w;
                if(!inq[v]){
                    q.push(v);
                    inq[v]=1;
                }
            }
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    s=1,t=n;
    memset(front,-1,sizeof(front));
    for(int i=1;i<=n;i++) d1[i]=d2[i]=INF;
    int u,v,w;
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&u,&v,&w);
        insert(u,v,w);
        insert(v,u,w);
    }
    JuPaFA(1,d1);
    JuPaFA(t,d2);
    int ans=INF;
    for(int i=1;i<=n;i++){
        for(int j=front[i];j>=0;j=e[j].Next){
            v=e[j].to;
            w=e[j].v;
            int tmp=d1[i]+d2[v]+w;
            if(tmp>d1[n]&&tmp<ans) ans=tmp;
        }
    }
    printf("%d",ans);
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/151016.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!