[ABC061D]Score Attack/「模板」Bellman-ford 算法
时间:2021-08-11
本文章向大家介绍[ABC061D]Score Attack/「模板」Bellman-ford 算法,主要包括[ABC061D]Score Attack/「模板」Bellman-ford 算法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
做了这题我发现
- 我不懂单源最短路。
- BF 还是有用的。
给出有向图,求单源最长路,或指出有环。
开始时觉得这不是直接写个 spfa 记录一下每个点更新次数解决?然后就 WA 了。
其实这是一个严重的历史遗留问题,即学习最短路算法时不经 BF 直接学习并记下 SPFA。
首先,WA 是很显然的,比如下面这幅图。
出现环了不代表在到 \(n\) 的路上一定有。那难道要找出每个环上的点并一一判断是否在到 \(n\) 的路径上吗?其实并不是,只需要对代码进行小小的改动就可以了。
先回到 BF,BF 的流程是这样的:
- 迭代 \(n-1\) 次。
- 每一次尝试松弛每条边。
\[\boxed{
\begin{aligned}
\text{Be}&\text{llman-Ford 伪代码}\\
\hline
1.\ &\text{for } i = 1 \to n-1 \\
2.\ & \kern{2em}\text{for } j = 1 \to m \\
3.\ & \kern{4em} d_{v_j} = \min\{d_{v_j}, d_{u_j} + l_j\}\\
\end{aligned}
}
\]
其实感性理解一下十分的简单,就是一个 dp 的思想,因为每个路径不可能有超过 \(n-1\) 条边,而每次进行一次迭代时会让最短路延长上 \(1\),所以迭代 \(n-1\) 次就可以出结果了。
那么如何判环呢?很简单,如果再来一次某个点的最短路又双叒叕被更新了,那么在前往其的路径上肯定有一个环。注意,是前往其的路径上有一个环。
未完待续。
原文地址:https://www.cnblogs.com/Acfboy/p/15128913.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Matplotlib自定义坐标轴刻度的实现示例
- Python基于time模块表示时间常用方法
- ITK 实现多张图像转成单个nii.gz或mha文件案例
- 一文轻松掌握python语言命名规范规则
- php原生数据库分页的代码实例
- python对一个数向上取整的实例方法
- Laravel框架FormRequest中重写错误处理的方法
- python名片管理系统开发
- PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
- PHP实现微信商户支付企业付款到零钱功能
- yii2 开发api接口时优雅的处理全局异常的方法
- PHP调用全国天气预报数据接口查询天气示例
- Python使用itcaht库实现微信自动收发消息功能
- Laravel源码解析之路由的使用和示例详解
- PHP实现的用户注册表单验证功能简单示例