C++ 有边数限制的最短路 Bellman_ford算法(带负权边)

给定一个 n
个点 m
条边的有向图,图中可能存在重边和自环, 边权可能为负数。

请你求出从 1
号点到 n
号点的最多经过 k
条边的最短距离,如果无法从 1
号点走到 n
号点,输出 impossible。

注意:图中可能 存在负权回路 。

输入格式
第一行包含三个整数 n,m,k

接下来 m
行,每行包含三个整数 x,y,z
,表示存在一条从点 x
到点 y
的有向边,边长为 z

点的编号为 1∼n

输出格式
输出一个整数,表示从 1
号点到 n
号点的最多经过 k
条边的最短距离。

如果不存在满足条件的路径,则输出 impossible。

数据范围
1≤n,k≤500
,
1≤m≤10000
,
1≤x,y≤n

任意边长的绝对值不超过 10000

输入样例:
3 3 1
1 2 1
2 3 1
1 3 3
输出样例:
3

在这里插入图片描述

#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 510, M = 10010;
int n, m, k;
int dist[N], backup[N];struct Edge
{int a, b, w;
}edges[M];int bellman_ford()
{memset(dist, 0x3f, sizeof(dist));dist[1] = 0;for(int i = 0; i < k; i ++ ){memcpy(backup, dist, sizeof(backup)); // 拷贝一个备份,用上次的最短距离更新for(int j = 0; j < m; j ++ ){int a = edges[j].a, b = edges[j].b, w = edges[j].w;dist[b] = min(dist[b], backup[a] + w);}}if(dist[n] > 0x3f3f3f3f / 2) return -1;return dist[n];
}int main ()
{scanf("%d%d%d", &n, &m, &k);for(int i = 0; i < m; i ++ ){int a, b, w;scanf("%d%d%d", &a, &b, &w);edges[i] = {a, b, w};}int t = bellman_ford();if(t == -1) puts("impossible");else printf("%d\n", t);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第3部分 原理篇3可验证凭证(VC)(1)

3.3. 可验证凭证 3.3.1. 本节内容概述 本聪老师&#xff1a;今天开始去中心化身份中另一个最重要的概念可验证凭证&#xff08;verifiable credential&#xff09;的学习。凭证&#xff0c;也就是证件&#xff0c;在人类生活中不可或缺。可验证凭证实现了凭证的机器可读、加密…

Vmware创建共享文件夹

具体设置步骤如下&#xff1a; 打开 “设置 -> 选项 -> 共享文件夹” 点击 “选项 -> 共享文件夹 ->选择总是开启 ->添加” 添加共享文件夹 选择主机路径和设置名称 选择启用此共享&#xff0c;并且点击完成退出。 挂载操作 在root用户下执行具体命令如下&…

前端项目代码规范 ----- 配置eslint规范,增加Git工作流规范

已实践&#xff0c;管用 ------ 在项目触发eslint规范 vscode配置eslint格式化vue&#xff0c;eslint不好使的问题_vue/html-indent-CSDN博客 增加Git 工作流 前端规范之Git工作流规范 Husky lint-staged_.lintstagedrc-CSDN博客 ------ 另外&#xff0c;在package.js…

mysql 时间精度问题

timestamp到2038年&#xff0c;还有14年时间&#xff0c;一个系统如果能活到那一刻也是相当不错了。 这里先看一下个datetime的问题,下面的插入数据的时间戳是2024-03-06 21:20:50.839 INSERT INTO psi_io_balance ( id, as_id, bill_date, order_id, busi_type, direction, c…

JavaScript事件代理

事件代理 事件代理&#xff0c;通俗来讲&#xff0c;就是把一个元素响应事件&#xff08;click、keydown......&#xff09;的函数委托到另一个元素 应用场景一般都是在有一个列表之中有大量的列表项&#xff0c;需要在点击列表项的时候响应一个事件 这时候就可以事件委托&a…

安卓简单登录

注意 有的朋友不知道登录咋写&#xff0c;这里我就简单给出相应代码&#xff0c;用的本地存储&#xff0c;没用网络请求&#xff0c;有需要可以替换成想要的&#xff0c;废话不多上代码 登录 import androidx.appcompat.app.AppCompatActivity;import android.content.Context…

JVM入门篇(面试前速补)

近期看看JVM&#xff0c;看了狂神说入门教学&#xff0c;总结下给大家。 文章目录 1、JVM的位置2、JVM的结构体系3、类加载器及双亲委派机制3.1、类加载器作用3.2、类加载器类型3.3、双亲委派机制 * 4、沙箱安全机制5、Native、方法区5.1、Native&#xff08;本地方法栈引用&a…

探秘Rpc远程调用:深入了解RPC远程调用的原理及应用(一)

本系列文章简介&#xff1a; 本系列文章将深入探讨RPC远程调用的原理和应用&#xff0c;帮助大家更好地理解RPC远程调用的工作原理&#xff0c;以及它在分布式系统中的实际应用场景。我们将介绍RPC远程调用的基本原理和工作流程&#xff0c;并探讨不同的协议和实现方式。此外&a…

【SQL】1068. 产品销售分析 I

题目描述 leetcode题目&#xff1a;1068. 产品销售分析 I 写法 select Product.product_name, Sales.year, Sales.price from Sales left join Product on Sales.product_id Product.product_id记录细节&#xff1a;加上表名检索效率更高。 -- ERROR: 时间超出限制 > 加…

181基于matlab的利用LMS算法、格型LMS算法、RLS算法、LSL算法来估计线性预测模型参数a1和a2

基于matlab的利用LMS算法、格型LMS算法、RLS算法、LSL算法来估计线性预测模型参数a1和a2&#xff1b;预测信号由二阶线性预测模型产生。2.利用LMS算法和RLS算法将一个叠加有噪声的信号实现噪声消除&#xff0c;恢复原始信号。有22页试验分析文档。&#xff08;包括程序在内&…

华为OD机试 - 疫情扩散时间计算 - 矩阵(Java 2024 C卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&am…

解决 Python 脚本无法生成结果的问题

我们在python编程时&#xff0c;始终无法生成想要的成果&#xff0c;其实问题并非单一的&#xff0c;可能有多种情况导致的结果&#xff1b;例如&#xff1a;语法错误、运行时错误、依赖项问题、权限问题、死锁或阻塞等问题&#xff0c;下面我将举例说明遇到这些问题该如何解决…

通过 python 和 wget 批量下载文件(在Linux/Ubuntu/Debian中测试)

首先创建一个文本文件d.txt, 一行一个链接。 你可以使用简单的 Python 脚本逐行读取文件 (d.txt) 中的链接&#xff0c;并使用 wget 下载文件&#xff1a; import subprocess# File containing download links (replace with your file path) file_path d.txt# Function to …

Python 爬虫快速入门

1. 背景 最近在工作中有需要使用到爬虫的地方&#xff0c;需要根据 Gitlab Python 实现一套定时爬取数据的工具&#xff0c;所以借此机会&#xff0c;针对 Python 爬虫方面的知识进行了学习&#xff0c;也算 Python 爬虫入门了。 需要了解的知识点&#xff1a; Python 基础语…

vue 选项/生命周期钩子 详解

通俗地讲&#xff0c;生命周期即Vue实例或组件从创建到被消灭的一系列过程&#xff0c;中间的各个节点被称为钩子.例如&#xff1a;vue.js中created方法是一个生命周期钩子函数&#xff0c;每一个阶段都会有一个钩子函数&#xff0c;方便开发者在不同阶段处理不同逻辑。例如&am…

Java多线程——对象的原子更新

目录 引出对象原子更新AtomicReferenceAtomicLongFieldUpdaterABA问题 Redis冲冲冲——缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Java多线程——对象的原子更新 对象原子更新 AtomicReference package cn.test3; import lombok.AllAr…

springboot之mybaitsPlus

mybaitsPlus是国内开发的&#xff0c;并不是springboot的项目&#xff0c;只是学习的时候直接就是适配的springboot。 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不…

[ubuntu]ubuntu终端代理和清除终端代理命令

ubuntu设置终端代理和清除代理命令 1、添加代理 export http_proxyhttp://proxyAddress:port export https_proxyhttp://proxyAddress:port 2、查看代理 env |grep -i proxy 3、清除代理 unset http_proxy unset https_proxy 4、通过图形界面设置的代理清除 改3个文件 sudo…

linuxOPS基础_操作系统概述

计算机发展史 第一台计算机是1946 年2 月14 日诞生日&#xff0c;第一台名称ENIAC。体积一间屋子的大小&#xff0c;重量高达28t。 第一代&#xff1a;1946 – 1958 > 12 年 &#xff08;电子管&#xff09; 第二代&#xff1a;1958 – 1964 > 6 年 &#xff08;晶体管…

vue实现虚拟键盘

本文介绍一体机常用的虚拟键盘实现&#xff0c;主打一个免费文章。喜欢就点个赞支持一下吧 simple-keyboard官网&#xff1a;simple-keyboard - simple-keyboard - Francisco HodgeSimple-keyboard is a virtual keyboard for Javascript. You can use it as an input for dev…