【AcWing】853. 有边数限制的最短路(bellman-ford贝尔曼福特算法)

news2024/9/21 0:17:06

存储:

这个算法存边不一定要写成邻接表,随便存,只要能遍历到所有边即可,结构体数组。

过程:

负权边、负权回路:

贝尔曼福特算法处理有负权边的图。(注意,有负权回路的话,最短路径就不一定存在了。)(负权回路,一圈的长度小于0。)

贝尔曼福特算法是可以求出是否存在负权回路的。(但一般找负环不用他来做,用spfa,因为贝尔曼福特算法时间复杂度比较高(nm)。)

但有边数限制的最短路只能用贝尔曼福特,不能用spfa。(spfa算法一定要求题目中不存在负环。使用Dijkstra不能存在负权边。 )

证明有负环最短路不一定存在:

迭代k次之后,求的最短距离是什么含义,dist数组是什么含义。从1号点经过不超过k条边,走到每个点的最短距离。如果第n次迭代,又更新了某些边,那么就说明存在一条最短路径的变边数是>=n的,是n条边。n条边就意味着有n+1个点,1到n只有n个点,抽屉原理,一定有两个点编号一样,路径上就一定环,路径上存在环就一定是更新过了之后,所以这个环一定是负环。

不一定的证明,存在负权回路也有最短路径:

题目限制了经过的边数不超过k条,所以在负环里不能无限转,最多只能转k次,有负环也就无所谓了。

串联:

 > 0x3f3f3f3f /2:

存在负权边,1号点不能到5号点,也不能到n号点。5的+oo可以更新n的+oo,每次+oo-2,就不是0x3f3f3f3f了,但还是很大。题目限制边长绝对值不大于1万,k不大于500,所以最多减500万。所以就写成大于一个比较大的数,表示他到不了。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const int N=510,M=10010;

int n,m,k;
int dist[N],backup[N];//backup用于备份上一次的迭代结果。

struct Edge{
    int a, b, w;//a->b,权重w
}edges[M];

void bellman_ford(){
    memset(dist,0x3d,sizeof dist);
    dist[1]=0;
    
    for(int i=0;i<k;i++){//走k条边,每一次迭代向前走一条边
        
        memcpy(backup,dist,sizeof dist);//备份dist数组,防止本次更新的数据影响本次其他数据的更新
        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);//取最短路(不超过k条边的)
            //dist[b]=min(dist[b],dist[a]+w);这样结果是2,就是串联了
        }
    }
}

int main(){
    cin>>n>>m>>k;
    
    for(int i=0;i<m;i++){
        int a,b,w;
        cin>>a>>b>>w;
        edges[i]={a,b,w};
    }
    
    bellman_ford();
    
    if(dist[n] > 0x3f3f3f3f/2) puts("impossible");//大于一个比较大的数
    else cout<<dist[n]<<endl;
    return 0;
}

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

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

相关文章

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月7日新模型预测第80弹

经过近80期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;70多期一共只错了8次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c…

2024PyCharm专业版详细安装激活教程

如果你正在学习Python&#xff0c;那么你需要的话可以&#xff0c;点击这里&#x1f449;Python重磅福利&#xff1a;入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享&#xff01; 前言 PyCharm是由JetBrains公司开发的一款强大的Python集成开发环境&#…

11--kubernetes的Ingress应用

前言&#xff1a;本章主要记录ingress暴露服务方式&#xff0c;会详细解释其原理及两种网络模式应用实操。 1、Ingress概念详解 Kubernetes 暴露服务的方式目前只有三种&#xff1a;LoadBlancer Service、NodePort Service、Ingress&#xff0c;Service属于4层负载均衡&#…

MySQL数据库的SQL注入漏洞解析

说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 …

FreeRTOS内部机制学习01(任务创建的细节以及任务调度的内部机制)

文章目录 前言&#xff1a;首先要谢谢韦东山老师的无私奉献&#xff0c;让我学到了很多东西&#xff0c;我做这个笔记是害怕我会忘记&#xff0c;所以就记录了下来&#xff0c;希望对大家有帮助&#xff01;关于寄存器CPU内部的寄存器这些寄存器到底要保存一些什么&#xff1f;…

Leetcode67---二进制求和

https://leetcode.cn/problems/add-binary/description/ 给出的两个二进制&#xff0c;我们可以从最后开始往前运算。 给当前短的一位前面补充0即可。 class Solution {public String addBinary(String a, String b) {//给的就是二进制字符串 最后一位开始遍历 如果没有就补充…

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念&#xff0c;以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么&#xff1f;通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容&#xff0c;主要就是BTP的实际操作流程&#xff0c;比如账号注册&#xff0c;登录&#…

Dify.ai:部署自己的 AI 应用、知识库机器人,简单易用

Dify.ai:部署自己的 AI 应用、知识库机器人,简单易用 今天,来分享下 Dify.AI 这个产品,一句话介绍:可供普通人简单易用的部署生成出一个 AI 应用。这是一种使用人工智能技术来帮助团队开发和运营 AI 应用的工具。 什么是 Dify.ai Dify.ai 是一个易于使用的 LLMOps 平台…

资料分析系统课-刘文超老师

1、考试大纲 2、解题的问题->解决方法 3、统计术语 基期量与现期量&#xff1a;作为对比参照的时期称为基期&#xff0c;而相对于基期的称为现期。描述具体数值时我们称之为基期量和现期量。 增长量&#xff1a;是指基期量与现期量增长(或减少)的绝对量。增长量是具体值&…

如何将代理IP设置为ISP:详细指南

在当今互联网时代&#xff0c;代理IP已经成为许多用户保护隐私和提升网络体验的重要工具。而ISP&#xff08;Internet Service Provider&#xff09;的代理IP更是因为其高质量和稳定性备受青睐。本文将详细介绍如何将代理IP设置为ISP&#xff0c;让你在网络世界中享受更优质的上…

通信工程学习:什么是SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制

SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制 SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制是三种不同的调制方式&#xff0c;它们在通信系统中各有其独特的应用和特点。以下是对这三种调制方式的详细解释&#xff1a; 一、SSB单边带调制 1、SSB单边带…

C语言——文件

学习目标&#xff1a; 学会文件的读写 例如&#xff1a; 学会文件的读写 学习内容&#xff1a; fgerc&#xff1a;一次读一个 fgets&#xff1a;一次读一行 fread&#xff1a;一次读多个 、 文件拷贝到文件夹&#xff1a;

4.4 版本管理器——VM实现

VM层通过VersionManager&#xff0c;向上层提供api接口以及各种功能&#xff0c;对于VM上层的模块&#xff08;是使用了VM层接口的上层模块&#xff09;&#xff0c;那么操作的都是Entry结构 而VM依赖于DM&#xff0c;所以VM视角里&#xff08;在自我实现里面&#xff09;&…

C++数据结构重要知识点(5)(哈希表、unordered_map和unordered_set封装)

1.哈希思想和哈希表 &#xff08;1&#xff09;哈希思想和哈希表的区别 哈希&#xff08;散列、hash&#xff09;是一种映射思想&#xff0c;本质上是值和值建立映射关系&#xff0c;key-value就使用了这种思想。哈希表&#xff08;散列表&#xff0c;数据结构&#xff09;&a…

鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻…

三维布尔运算对不规范几何数据的兼容处理

1.前言 上一篇文章谈过八叉树布尔运算&#xff0c;对于规范几何数据的情况是没有问题的。 在实际情况中&#xff0c;由于几何数据来源不一&#xff0c;处理和生成方式不一&#xff0c;我们无法保证进行布尔运算的几何数据都是规范的&#xff0c;对于不规范情况有时候也有需求…

个股场外期权的行权时间是什么时候?

今天带你了解个股场外期权的行权时间是什么时候&#xff1f;场外个股期权的行权日并没有一个固定的日期&#xff0c;它主要取决于期权合约的具体条款和规定。 个股场外期权 个股场外期权是指在场外交易市场进行的、以单个股票为标的资产的期权合约。这种期权与在交易所交易的…

@Cacheable踩坑,服务停住,~lock

1、问题&#xff1a; 方法使用Cacheable注解&#xff0c;服务每次重启后&#xff0c;调到这个方法都服务停住了&#xff0c;日志也不打了。 2、原因&#xff1a; 服务停止住了&#xff0c;发现redis会生成key~lock的锁&#xff0c;永不过期&#xff0c;也没有删除。 例如以下…

【2025】公司仓库管理系统的设计与实现(公司仓库信息管理系统,仓库信息系统,管理系统,信息管理系统,货物仓管系统)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【IEEE出版】2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛(NPSIF 2024,10月30-11月1)

2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛将于2024年10月30-11月1日于海南博鳌举办。 会议的历史悠久&#xff0c;致力于促进电力系统领域的研究和开发活动&#xff0c;同时也着眼于促进全球各地研究人员、开发人员、工程师、学生和从业人员之间的科学信息…