随想录 Day 74 Bellman_ford

随想录 Day 74 Bellman_ford

Bellman_ford 队列优化

94. 城市间货物运输 I

时间限制:1.000S 空间限制:256MB
题目描述
某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。

网络中的道路都有各自的运输成本和政府补贴,道路的权值计算方式为:运输成本 - 政府补贴。权值为正表示扣除了政府补贴后运输货物仍需支付的费用;权值为负则表示政府的补贴超过了支出的运输成本,实际表现为运输过程中还能赚取一定的收益。

请找出从城市 1 到城市 n 的所有可能路径中,综合政府补贴后的最低运输成本。如果最低运输成本是一个负数,它表示在遵循最优路径的情况下,运输过程中反而能够实现盈利。

城市 1 到城市 n 之间可能会出现没有路径的情况,同时保证道路网络中不存在任何负权回路。

输入描述
第一行包含两个正整数,第一个正整数 n 表示该国一共有 n 个城市,第二个整数 m 表示这些城市中共有 m 条道路。

接下来为 m 行,每行包括三个整数,s、t 和 v,表示 s 号城市运输货物到达 t 号城市,道路权值为 v (单向图)。

输出描述
如果能够从城市 1 到连通到城市 n, 请输出一个整数,表示运输成本。如果该整数是负数,则表示实现了盈利。如果从城市 1 没有路径可达城市 n,请输出 “unconnected”。
输入示例
6 7
5 6 -2
1 2 1
5 3 1
2 5 2
2 4 -3
4 6 4
1 3 5
输出示例
1

提交

Bellman_ford算法的核心思想是 对所有边进行松弛n-1次操作(n为节点数量),从而求得目标最短路。

# include <iostream>
# include <vector>
# include <climits>
# include <queue>
using namespace std;class Edge {public:Edge(int e, int w) {end = e;weight = w;}int end, weight;
};
int n, m;
int main() {cin>> n >> m;vector<vector<Edge> > edges(n+1);vector<int> minDir(n+1, INT_MAX);for (int i = 0; i < m; i++) {int start, end, weight;cin>> start >>end >>weight;edges[start].push_back(Edge(end, weight));}queue<int> que;minDir[1] = 0;que.push(1);while(!que.empty()) {int now = que.front();que.pop();for (Edge edge : edges[now]) {if (minDir[now] + edge.weight < minDir[edge.end]) {minDir[edge.end] =  minDir[now] + edge.weight;que.push(edge.end);}} }// for (int relex = 0 ; relex < n; relex ++) {//     for (Edge edge: edges) {//         if (minDir[edge.start] != INT_MAX) {//             minDir[edge.end] = min(minDir[edge.end], minDir[edge.start] + edge.weight);//         }//     }// }if (minDir[n] != INT_MAX) {cout<< minDir[n];} else {cout<< "unconnected";}
}

判断是否有负回路

95. 城市间货物运输 II

时间限制:1.000S 空间限制:256MB
题目描述
某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。

网络中的道路都有各自的运输成本和政府补贴,道路的权值计算方式为:运输成本 - 政府补贴。权值为正表示扣除了政府补贴后运输货物仍需支付的费用;权值为负则表示政府的补贴超过了支出的运输成本,实际表现为运输过程中还能赚取一定的收益。

然而,在评估从城市 1 到城市 n 的所有可能路径中综合政府补贴后的最低运输成本时,存在一种情况:图中可能出现负权回路。负权回路是指一系列道路的总权值为负,这样的回路使得通过反复经过回路中的道路,理论上可以无限地减少总成本或无限地增加总收益。为了避免货物运输商采用负权回路这种情况无限的赚取政府补贴,算法还需检测这种特殊情况。

请找出从城市 1 到城市 n 的所有可能路径中,综合政府补贴后的最低运输成本。同时能够检测并适当处理负权回路的存在。

城市 1 到城市 n 之间可能会出现没有路径的情况

输入描述
第一行包含两个正整数,第一个正整数 n 表示该国一共有 n 个城市,第二个整数 m 表示这些城市中共有 m 条道路。

接下来为 m 行,每行包括三个整数,s、t 和 v,表示 s 号城市运输货物到达 t 号城市,道路权值为 v。

输出描述
如果没有发现负权回路,则输出一个整数,表示从城市 1 到城市 n 的最低运输成本(包括政府补贴)。如果该整数是负数,则表示实现了盈利。如果发现了负权回路的存在,则输出 “circle”。如果从城市 1 无法到达城市 n,则输出 “unconnected”。
输入示例
4 4
1 2 -1
2 3 1
3 1 -1
3 4 1
输出示例
circle
提示信息
路径中存在负权回路,从 1 -> 2 -> 3 -> 1,总权值为 -1,理论上货物运输商可以在该回路无限循环赚取政府补贴,所以输出 “circle” 表示已经检测出了该种情况。

数据范围:

1 <= n <= 1000;
1 <= m <= 10000;

-100 <= v <= 100;

# include <iostream>
# include <vector>
# include <climits>
using namespace std;class Edge {public: int start, end, weight;
};
int n , m;int main() {cin>> n >>m;vector<Edge> edges(m);for (int i = 0; i < m; i++) {cin>> edges[i].start >> edges[i].end >> edges[i].weight;}vector<int> minDis(n + 1, INT_MAX);minDis[1] = 0;int minDisN;int minDisN1;for (int relax =0 ; relax <= n; relax++) {for (Edge edge: edges) {if (minDis[edge.start] != INT_MAX && minDis[edge.start] +edge.weight < minDis[edge.end]) {minDis[edge.end] = minDis[edge.start] +edge.weight;} }if (relax == n-1) minDisN = minDis[n];if (relax == n) minDisN1 = minDis[n];}if (minDisN == INT_MAX) {cout<< "unconnected";return 0;}if (minDisN1 != minDisN) {cout<< "circle";return 0;}cout<< minDisN1;
}

有限次最短路径

96. 城市间货物运输 III

时间限制:1.000S 空间限制:256MB
题目描述
某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市,通过道路网络连接,网络中的道路仅允许从某个城市单向通行到另一个城市,不能反向通行。

网络中的道路都有各自的运输成本和政府补贴,道路的权值计算方式为:运输成本 - 政府补贴。权值为正表示扣除了政府补贴后运输货物仍需支付的费用;权值为负则表示政府的补贴超过了支出的运输成本,实际表现为运输过程中还能赚取一定的收益。

请计算在最多经过 k 个城市的条件下,从城市 src 到城市 dst 的最低运输成本。

输入描述
第一行包含两个正整数,第一个正整数 n 表示该国一共有 n 个城市,第二个整数 m 表示这些城市中共有 m 条道路。

接下来为 m 行,每行包括三个整数,s、t 和 v,表示 s 号城市运输货物到达 t 号城市,道路权值为 v。

最后一行包含三个正整数,src、dst、和 k,src 和 dst 为城市编号,从 src 到 dst 经过的城市数量限制。

输出描述
输出一个整数,表示从城市 src 到城市 dst 的最低运输成本,如果无法在给定经过城市数量限制下找到从 src 到 dst 的路径,则输出 “unreachable”,表示不存在符合条件的运输方案。
输入示例
6 7
1 2 1
2 4 -3
2 5 2
1 3 5
3 5 1
4 6 4
5 6 -2
2 6 1
输出示例
0
提示信息
从 2 -> 5 -> 6 中转一站,运输成本为 0。

1 <= n <= 1000;

1 <= m <= 10000;

-100 <= v <= 100;

注意负回路

# include <iostream>
# include <vector>
# include <climits>
using namespace std;class Edge {public: int start, end, weight;
};
int n , m, src, dst, k;int main() {cin>> n >>m;vector<Edge> edges(m);for (int i = 0; i < m; i++) {cin>> edges[i].start >> edges[i].end >> edges[i].weight;}cin >>src >> dst>> k;vector<int> minDis(n + 1, INT_MAX);vector<int> minDisTemp(n+1);minDis[src] = 0;int minDisN;int minDisN1;for (int relax =0 ; relax <= k; relax++) {minDisTemp = minDis;for (Edge edge: edges) {if (minDisTemp[edge.start] != INT_MAX && minDisTemp[edge.start] +edge.weight < minDis[edge.end]) {minDis[edge.end] = minDisTemp[edge.start] +edge.weight;} }// if (relax == n-1) minDisN = minDis[n];// if (relax == n) minDisN1 = minDis[n];}if (minDis[dst] == INT_MAX) {cout<< "unreachable";return 0;}cout<< minDis[dst];
}

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

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

相关文章

X射线底片焊缝缺陷检测

实现四种焊缝缺陷的检测和分割处理。

Python:谈谈常规滤波器(带通、低通、高通、带阻)的用法

一、滤波器的作用 滤波器在信号处理中用于移除或减少信号中的噪声&#xff0c;同时保持信号的某些特性。滤波器通常用于音频、视频和图像处理等领域。滤波器根据其 designed for different purposes and can be divided into several types, such as lowpass filters, highpass…

Pikachu 不安全的文件下载(Unsafe file download)概述 附漏洞利用案例

目录 获取下载链接 修改链接 重新构造链接 拓展 不安全的文件下载概述 文件下载功能在很多web系统上都会出现&#xff0c;一般我们当点击下载链接&#xff0c;便会向后台发送一个下载请求&#xff0c;一般这个请求会包含一个需要下载的文件名称&#xff0c;后台在收到请求…

02.Ambari自定义服务开发-metainfo.xml介绍

文章目录 metainfo.xml 介绍配置说明Hbase metainfo.xml配置说明配置参数详细介绍配置文件样例DORIS metainfo.xml 介绍 ​ 在Ambari自定义开发中&#xff0c;metainfo.xml 配置文件起着至关重要的作用。它用于定义服务的元数据信息&#xff0c;包括服务的版本、组件、执行脚本…

Todesk远程Ubuntu桌面系统100%但是进不去桌面

1、报错情况 如下图所示&#xff0c;用Todesk远程Ubuntu桌面&#xff0c;看到连接100%了&#xff0c;但是进不去桌面 ubuntu系统看起来的话&#xff0c;已经像被远程成功了 我就首先把todesk卸载重新安装了&#xff0c;后面发现还是这样&#xff0c;于是我就找客服去问了&…

Trick :无 trick,概率 DP

题目链接 E - Random Swaps of Balls (atcoder.jp) Statements Problem Statement There are N − 1 N - 1 N−1 white balls and one black ball. These N N N balls are arranged in a row, with the black ball initially at the leftmost position. Takahashi will …

Qt之Pdb生成及Dump崩溃文件生成与调试(含注释和源码)

文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…

SpringMVC(1)——入门程序+流程分析

MVC都是哪三层&#xff1f;在Spring里面分别对应什么&#xff1f;SpringMVC的架构是什么&#xff1f; 我们使用Spring开发JavaWeb项目&#xff0c;一般都是BS架构&#xff0c;也就是Browser&#xff08;浏览器&#xff09;-Server&#xff08;服务器&#xff09;架构 这种架构…

MIG核使用APP接口,app_ref_req直接置0可以吗

这是一个关于MIG&#xff08;Memory Interface Generator&#xff09;核使用APP&#xff08;Application&#xff09;接口时&#xff0c;app_ref_req信号处理的重要问题。 app_ref_req信号的作用&#xff1a; 这是一个输入信号&#xff0c;允许应用程序请求执行刷新操作。当置高…

基于SpringBoot的超市进销存系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;MyEclipse、Tomcat 系统展示 首页 首页界面图 个人中心 个人中心…

爬虫技术在物联网数据采集中的应用

爬虫技术在物联网数据采集中的应用案例主要包括以下几个方面&#xff1a; 电商平台数据采集&#xff1a;例如&#xff0c;使用Python编写的网络爬虫可以用于爬取京东网页相关数据&#xff0c;如品牌、标题、价格、店铺等&#xff0c;并进行数据处理及可视化展示。这种方法不仅可…

ESP32实现UDP连接——micropython版本

代码&#xff1a; import network import socket import timedef wifiInit(name, port):ap network.WLAN(network.AP_IF) # 创建一个热点ap.config(essidname, authmodenetwork.AUTH_OPEN) # 无需密码ap.active(True) # 激活热点ip ap.ifconfig()[0] # 获取ip地址print(…

【D3.js in Action 3 精译】1.1.2 D3.js 的适用场景

译注 上一节中我们了解了 D3 诞生的技术背景——为了满足 Web 可访问数据的可视化需求。本节再来看看 D3.js 的适用场景是怎样的、在什么时候会考虑使用 D3.js。 1.1.2 D3.js 的适用场景 数据可视化领域正蓬勃发展&#xff0c;且备受青睐。过去十年间用于生成数据驱动图形的工…

【Android面试八股文】如何判断一个APP在前台还是后台?有哪几种方法?

文章目录 1. ActivityLifecycleCallbacks2. RunningTasks 和 RunningProcesses2.2.1 RunningTasks实现步骤示例代码解释与注意事项替代方案2.2 RunningProcesses实现步骤示例代码解释与注意事项总结3. 使用 Activity 生命周期方法在最新的 Android 开发环境中,推荐的做法是使用…

slot插槽详解及动态插槽的使用

slot插槽的作用: 让用户可以拓展组件,更好地去复用组件,并对其做定制化; slot的用法: 可以分为三类:默认插槽、具名插槽、作用域插槽 插槽用<slot>标签来确定渲染的位置,里面可以包含默认内容,如果没有提供插槽内容,则显示默认内容; 默认插槽: 子组件中…

动态代理和静态代理的区别

动态代理和静态代理在多个方面都有显著的区别。 首先&#xff0c;从代理的对象来看&#xff0c;静态代理通常只代理一个类&#xff0c;而动态代理则可以代理一个接口下的多个实现类。静态代理在编程时就已经明确知道要代理哪个类&#xff0c;而动态代理在运行时才决定要代理的…

Linux—进程与计划管理

目录 一、程序 二、进程 1、什么是进程 2、进程的特点 3、进程、线程、携程 3.1、进程 3.2、线程 3.3、携程 三、查看进程信息 1、ps -aux 2、ps -elf 3、top ​3.2、输出内容详解 3.2.1、输出第一部分解释 3.2.2、输出第二部分解释 4、pgrep 5、pstree 四、进…

【项目】论坛系统项目自动化测试

论坛系统项目自动化测试 前述一、脑图二、代码编写1.公共类InitAndEnd1.登录页面测试ForumLoginTest正常登录&#xff1a;异常登录&#xff1a; 3.注册页面测试ForumRegisterTest注册成功&#xff1a;注册失败&#xff1a; 4论坛列表页面测试ForumListTest登录状态下&#xff1…

1.spring入门案例

Spring 介绍 Spring是轻量级的开源的JavaEE框架。 Spring有两个核心部分&#xff1a;IOC和AOP IOC 控制反转&#xff0c;把创建对象过程交给Spring进行管理。 AOP 面向切面&#xff0c;不修改源代码进行功能增强。 Spring特点 1.方便解耦&#xff0c;简化开发。 2.AOP编…

算法体系-25 第二十五节:窗口内最大值或最小值的更新结构

一 滑动窗口设计知识点 滑动窗口是什么&#xff1f; 滑动窗口是一种想象出来的数据结构&#xff1a; 滑动窗口有左边界L和有边界R 在数组或者字符串或者一个序列上&#xff0c;记为S&#xff0c;窗口就是S[L..R]这一部分 L往右滑意味着一个样本出了窗口&#xff0c;R往右滑意味…