题解 | #追债之旅#

追债之旅

https://ac.nowcoder.com/acm/problem/14700

有边数限制的最短路 —— bellman_ford 模板题

时间复杂度 O(nm)

#include <bits/stdc++.h>

using namespace std;

const int N = 1010, M = 20010;

struct node{
    int a,b,w;
}p[M];
int a[N];
int sum[N];
int dist[N];
int backup[N];
int n,m,k;
int t;

int bellman_ford(){
    memset(dist,0x3f,sizeof dist);
    dist[1]=0;

    int ans=1e9;
    for(int i=1;i<=k;i++){
        memcpy(backup,dist,sizeof dist);
        for(int j=0;j<t;j++) {
            int a=p[j].a,b=p[j].b,w=p[j].w;
            if(dist[b]>backup[a]+w){
                dist[b]=backup[a]+w;
                if(b==n) ans=min(ans,dist[n]+sum[i]);    //更新总花费
            }
        }
    }

    if(dist[n]==0x3f3f3f3f) return -1;   //无法到达n点
    return ans;
}

int main(){
    cin>>n>>m>>k;

    while(m--) {
        int a,b,w;
        cin>>a>>b>>w;
        p[t++]={a,b,w};
        p[t++]={b,a,w};
    }
    for(int i=1;i<=k;i++) cin>>a[i],sum[i]=sum[i-1]+a[i];

    int x=bellman_ford();
    cout<<x<<endl;

    return 0;
}
全部评论
我感觉你的方法更简单
点赞 回复 分享
发布于 2022-10-08 19:36 江西

相关推荐

今天投了小鹏,收到了AI面,大概会问哪些啊?
期末一定及格:总共4个部分,心理测评、行测、然后就是问岗位、对岗位的理解、过往遇到了哪些难点怎么解决,很简单,没有什么特别专业的问题,都是一些综合素质相关的
小鹏汽车AI面7人在聊
点赞 评论 收藏
分享
06-27 15:29
门头沟学院 Java
点赞 评论 收藏
分享
自学java狠狠赚一...:骗你点star的,港卵公司,记得把star收回去
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务