AcWing 853. 有边数限制的最短路—bellman-ford算法

问题链接:AcWing 853. 有边数限制的最短路
问题描述
在这里插入图片描述
分析
bellman-ford算法可以用来解决带负权边的最短路问题,这是相比于DJ算法优秀的地方,但是要注意的是能解决带负权边的最短路问题,如果负权边构成了负权回路,那就有可能求不出来了。
bellman-ford算法的主要思想是做松弛操作,类似于Floyd算法,时间复杂度是O(nm),需要经过n轮松弛操作,每次遍历m条边。

用dist[]表示1号点到其他点的距离
遍历m条边
如果能用中间y点来更新1号点到点x的距离,则更新
dist[x]=min(dist[x],dist[y]+w),w为y到x的距离

需要注意的是,我们可以把n轮更新,理解为,1号点经过不超过n条边到达其余点的最短距离
如果需要要求边数为k,则遍历k轮即可
另外我们可以发现,在无环的情况下,1号点到其余点最长需要经过n-1条边
代码如下

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=510,M=10010,INF=0x3f3f3f3f;struct E{int u,v,w;
};
E edge[M];int n,m,k;
int dist[N],backup[N];
int bellman_ford(){memset(dist,0x3f,sizeof dist);dist[1]=0;for(int i=0;i<k;i++){memcpy(backup,dist,sizeof dist);for(int j=0;j<m;j++){int u=edge[j].u;int v=edge[j].v;int w=edge[j].w;dist[v]=min(dist[v],backup[u]+w);}}return dist[n];
}
int main(){cin>>n>>m>>k;for(int i=0;i<m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);edge[i]={u,v,w};}int k=bellman_ford();if(k<INF/2) cout<<k;else puts("impossible");return 0;
}

为了保证最多经过k条边,我们需要用上次更新的边来更新这一次的,所以需要backup数组,可以手动模拟样例理解

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

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

相关文章

【InternLM】书生-浦语大模型demo搭建服务接口部署本地映射

目录 前言一、InternLM大模型介绍1-1、大模型简介1-2、InternLM大模型简介1-2-1、InternLM-7B1-2-2、InternLM-20B 二、从0开始搭建InternLM-Chat-7B 智能对话 Demo2-0、环境搭建2-1、创建虚拟环境2-2、导入所需要的包2-3、模型下载2-4、代码克隆2-5、终端运行 三、服务器接口部…

解决“由于找不到d3dx9_43.dll无法继续执行代码”的5种方法

找不到d3dx9_43.dll文件导致无法继续执行代码的问题&#xff0c;通常是由于DirectX组件缺失或损坏引起的。这个错误通常出现在运行某些游戏或应用程序时&#xff0c;它会导致程序无法正常运行。下面我将介绍5种解决找不到d3dx9_43.dll的方法。 一、d3dx9_43.dll的文件属性&…

Python从入门到精通总结规划

Python从入门到精通专栏&#xff1a;http://t.csdnimg.cn/4Lals 时光飞逝&#xff0c;转眼间我们的Python从入门到精通专栏已经接近尾声。 在这里&#xff0c;向大家表示最诚挚的感谢。感谢你们一直以来对Python学习的热情&#xff0c;以及对本专栏的持续关注和支持。 回顾过去…

跨平台开发教学:构建同时支持iOS和Android的教育网校APP

当下&#xff0c;教育行业也逐渐迎来了数字化转型的时代。构建一款支持iOS和Android的教育网校APP&#xff0c;不仅可以提供更好的用户体验&#xff0c;还能扩大应用的覆盖面&#xff0c;满足不同用户群体的需求。 一、选择合适的跨平台开发框架 在开始构建教育网校APP之前&a…

Vue中使用Element UI的Table组件实现嵌套表格(最简单示例)

以下是一个简单的示例代码&#xff0c;演示如何在Vue中使用Element UI的Table组件实现嵌套表格&#xff1a; html <template><div><el-table :data"tableData" style"width: 100%"><el-table-column prop"name" label&quo…

通信触发流程

该示例方案主要介绍如何通过建立的Modbus或TCP通信来实现触发方案、协议解析、发送事件和以及响应配置等功能。 需求&#xff1a;使用Modbus通信触发指定流程运行。 搭建思路&#xff1a;在接收事件中使用协议组装&#xff0c;比较规则选择上升沿&#xff0c;当接收到的值从其…

3d全景怎么拍摄?应用领域有哪些?

3d全景技术是综合了VR技术和全景拍摄的一种新型应用技术&#xff0c;通过3D全景技术可以为用户带来720度无死角的观看方式和真实的观看体验&#xff0c;那么3d全景是怎么拍摄制作的呢&#xff1f;应用领域又有哪些呢&#xff1f; 3d全景拍摄制作流程其实不难&#xff0c;常见的…

(三)其他的输入输出

文章目录 getchar();单个字符输入使用&#xff1a; putchar();单个字符输出(自带换行)使用 puts();字符串输出与printf区别使用 gets();后面补充 代码现象 getchar(); 单个字符输入 使用&#xff1a; 变量 getchar(); 例&#xff1a;char a&#xff1b; a getchar(); put…

Git原理与应用(三)远程操作

Git原理与应用[三]远程操作 一.远程仓库操作1.理解分布式版本控制系统2.远程仓库的创建3.远程仓库克隆到本地4.向远程仓库推送:push5.拉取远程仓库:pull 二.模拟进行多人协作开发1.准备工作2.多人协作11.多人协作开发1.Linux用户开发2.Windows用户开发 2.合并冲突3.分支合并4.小…

[Flutter]WebPlatform上运行遇到的问题总结

[Flutter]WebPlatform上运行遇到的问题总结 目录 [Flutter]WebPlatform上运行遇到的问题总结 写在开头 正文 Q1、file_version_info.dart Q2、不兼容判断 Q3、跨域问题 Q4、flutter clean &#xff0c;无法删除build文件夹 其他 写在结尾 写在开头 Flutter项目已能在…

Flask 会员列表展示

感谢编程浪子师傅的源码信息分享 web/controllers/member/Member.py # -*- coding: utf-8 -*- from flask import Blueprint,request,redirect,jsonify from common.libs.Helper import ops_render,iPagination,getCurrentDate,getDictFilterField,selectFilterObj from comm…

揭秘人工智能:探索智慧未来

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是人工智能?二. 人工智能的关键技术2.1 机器学习2.2 深度学习2.1 计算机…