PTA-城市间紧急救援

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:

输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。

第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。

输入样例:

4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2

输出样例:

2 60
0 1 3

分析:

  1. 首先,代码从标准输入读取节点数 n,边数 m,源点 s 和终点 d。接着,读取每个节点的帮助值,并建立节点和其对应邻居的边(这里,边是有向的,每个边都连接两个节点,并有一个相关的权重)。
  2. 然后,初始化一个距离数组 dist,用于存储从源点 s 到每个节点的最短距离。同时,初始化两个累计数组 total 和 sum_help,用于存储从源点 s 到每个节点的所有节点的帮助值的总和。还初始化一个 parent 数组,用于存储最短路径上的节点。
  3. 使用堆(优先队列)q 存储待处理的节点。将源点 s 添加到堆中,并设置其距离为 0,总帮助值为 1,累计帮助值为其自身的帮助值。
  4. 然后,进入一个 while 循环,不断地从堆中取出距离最小的节点,并更新其邻居的距离和累计帮助值。如果邻居的距离更新,那么就将其添加到堆中。
  5. 当堆为空时,结束循环。此时,dist 和 total 数组中存储的值就是从源点 s 到每个节点的最短距离和累计帮助值。
  6. 最后,通过回溯 parent 数组,找出从源点 s 到终点 d 的最短路径,并打印出来。同时,打印出终点的累计帮助值。

Python版本:

import heapq
import sysn, m, s, d = map(int, sys.stdin.readline().split())
help_val = list(map(int, sys.stdin.readline().split()))
edge = [[] for _ in range(n)]
for _ in range(m):x, y, z = map(int, sys.stdin.readline().split())edge[x].append((y, z))edge[y].append((x, z))dist = [float("inf") for _ in range(n)]
total = [0 for _ in range(n)]
sum_help = [0 for _ in range(n)]
p = [-1 for _ in range(n)]
dist[s] = 0
total[s] = 1
sum_help[s] = help_val[s]
q = []
heapq.heappush(q, (0, s))while q:tmp = heapq.heappop(q)x = tmp[1]if dist[x] < tmp[0]:continuefor i in edge[x]:if dist[i[0]] > dist[x] + i[1]:dist[i[0]] = dist[x] + i[1]total[i[0]] = total[x]sum_help[i[0]] = sum_help[x] + help_val[i[0]]p[i[0]] = xheapq.heappush(q, (dist[i[0]], i[0]))else:if dist[i[0]] == dist[x] + i[1]:total[i[0]] += total[x]sum_help_tmp = sum_help[x] + help_val[i[0]]if sum_help_tmp > sum_help[i[0]]:sum_help[i[0]] = sum_help_tmpp[i[0]] = xpath = []
x = d
while x != -1:path.append(str(x))x = p[x]
print(total[d], sum_help[d])
print(" ".join(path[::-1]))

总结:

 

这段代码的主要创新点在于同时求解最短路径和累计帮助值。这在一些实际的网络优化问题中是非常有用的。例如,在紧急救援中,我们需要找出一条最短的路线,同时还要考虑沿途各个节点的资源(如食物、水等)的总量。

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

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

相关文章

采样概率 假设检验推导数组最大值的方法与可行性

当需要寻找大量数据中的最大值的时候&#xff0c;比如从 2G 个 float16 中寻找其中的最大值&#xff0c;是一件耗时的操作。 现计划通过小样本来发掘数据的规律&#xff0c;对最大值进行预测。 方案&#xff1a; step1&#xff0c;从2G个float16 中截取64段float16&#xff…

【Vue入门篇】基础篇—Vue指令,Vue生命周期

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;Vue概述&#x1f384;快速入门&#x1f33a;Vue指令⭐v-…

AI绘画工具汇总:免费、简单易上手

欢迎来到魔法宝库&#xff0c;传递AIGC的前沿知识&#xff0c;做有格调的分享❗ 喜欢的话记得点个关注吧&#xff01; 提到AI绘画&#xff0c;许多人通常会想到Midjourney和Stable Diffusion等工具&#xff0c;然而&#xff0c;这些工具对于新手而言门槛较高&#xff0c;不太友…

【C++】——标准模板库STL作业(其一)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

opencv使用pyinstaller打包错误:‘can‘t find starting number (in the name of file)

使用Python语言和opencv模块在pycharm中编辑的代码运行没问题&#xff0c;但是在使用pyinstaller打包后出现错误can‘t find starting number (in the name of file) [ERROR:0] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-q3d_8t8e\opencv\modules\videoi…

安卓毕业设计基于安卓android微信小程序的家校通系统

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序运行软件&#xff1a;微信开发者 项目介绍 基于微信小程序的家校通系统的设计基…

【实用】PPT没几页内存很大怎么解决

PPT页数很少但导出内存很大解决方法 1.打开ppt点击左上角 “文件”—“选项” 2.对话框选择 “常规与保存” &#xff08;1&#xff09;如果想要文件特别小时可 取消勾选 “将字体嵌入文件” &#xff08;2&#xff09;文件大小适中 可选择第一个选项 “仅最入文档中所用的字…

每日一题 1410. HTML 实体解析器(中等,模拟)

模拟&#xff0c;没什么好说的 class Solution:def entityParser(self, text: str) -> str:entityMap {&quot;: ",&apos;: "",>: >,<: <,&frasl;: /,&amp;: &,}i 0n len(text)res []while i < n:isEntity Falseif …

Oracle-客户端连接报错ORA-12545问题

问题背景: 用户在客户端服务器通过sqlplus通过scan ip登陆访问数据库时&#xff0c;偶尔会出现连接报错ORA-12545: Connect failed because target host or object does not exist的情况。 问题分析&#xff1a; 首先&#xff0c;登陆到连接有问题的客户端数据库上&#xff0c;…

高品质MP3音频解码语音芯片WT2003Hx的特征优势与应用场景

在现代化科技快速发展的时代&#xff0c;高品质音频语音芯片在各个领域的应用越来越广泛。唯创知音推出的高品质MP3音频语音芯片WT2003Hx&#xff0c;凭借其出色的特性与优势&#xff0c;赢得了市场的广泛认可。本文将详细介绍WT2003Hx的特征优势以及其在各个领域的应用场景。 …

单片机调试技巧--修改bin文件实现断点

fromelf --text -a -c --outputall.dis F103_Moduel\F103_Moduel.axffromelf --bin --outputtest.bin F103_Moduel\F103_Moduel.axf 在启动文件中&#xff0c;修改UsageFault_Handler UsageFault_Handler\PROC; get current contextTST lr, #0x04 ; if(!EXC_RETURN[2])ITE…

2014年08月25日 Go生态洞察:深入理解Go中的常量

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

高通OTA升级非常规分区方法

高通OTA升级非常规分区方法 1. 高通LE OTA背景2. 高通LE OTA升级方案2.1 SDX12 OTA方案2.2 OTA升级TZ/RPM/Aboot OTA是一个通用述语&#xff0c;常见的解释为over the air。通过这一解释&#xff0c;OTA最开始的概念&#xff0c;是空中升级。后来&#xff0c;又衍生出了FOTA&am…

中国智能汽车这一年,主打一个“卷”

文丨刘俊宏 “这才刚过去半年多&#xff0c;汽车行业又更新了一轮。”一位车评人在广州车展感叹道。 作为每年最后一个A级车展&#xff0c;广州车展向来被视为中国车市的“风向标”。相比上海车展“拥抱汽车行业新时代”、成都车展“驭见未来”的主题&#xff0c;广州车展“新…

数据结构(超详细讲解!!)第二十四节 二叉树(上)

1.定义 二叉树&#xff08;Binary Tree&#xff09;是另一种树型结构。 二叉树的特点&#xff1a; 1&#xff09;每个结点至多只有两棵子树&#xff08;即二叉树中不存在度大于2的结点&#xff09;&#xff1b; 2&#xff09;二叉树的子树有左右之分&#xff0c;其次序…

python爬虫教程:selenium常用API用法和浏览器控制

文章目录 selenium apiwebdriver常用APIwebelement常用API 控制浏览器 selenium api selenium新版本(4.8.2)很多函数&#xff0c;包括元素定位、很多API方法均发生变化&#xff0c;本文记录以selenium4.8.2为准。 webdriver常用API 方法描述get(String url)访问目标url地址&…

分布式锁之传统锁回顾(一)

1. 传统锁回顾 1.1. 从减库存聊起 多线程并发安全问题最典型的代表就是超卖现象 库存在并发量较大情况下很容易发生超卖现象&#xff0c;一旦发生超卖现象&#xff0c;就会出现多成交了订单而发不了货的情况。 场景&#xff1a; 商品S库存余量为5时&#xff0c;用户A和B同…

python:可迭代的数据类型、可变的数据类型、不可变的数据类型

python&#xff1a;可迭代的数据类型、可变的数据类型、不可变的数据类型 文章目录 python&#xff1a;可迭代的数据类型、可变的数据类型、不可变的数据类型可迭代的数据类型可变的数据类型不可变的数据类型 可迭代的数据类型 序列&#xff1a;str、bytes、tuple、list非序列…

PC8223(CC/CV控制)高耐压输入5V/3.4A同步降压电路内建补偿带恒流恒压输出

概述 PC8233&#xff08;替代CX8853&#xff09;是一款同步降压调节器,输出电流高达3.4A,操作范围从8V到32V的宽电源电压。内部补偿要求最低数量现成的标准外部组件。PC8233在CC&#xff08;恒定输出电流&#xff09;模式或CV&#xff08;恒定输出电压&#xff09;模式&#x…

莫托曼机器人测温程序

1机器程序 2.1 主程序 MAIN&#xff1a; NOP CALL JOB:ORG *1 JUMP *5 IF IN#(41)OFF CALL JOB:远程 IF IN#(25)ON CALL JOB:本地 IF IN#(26)ON CALL JOB:测距判断 CALL JOB:最后一支 *5 CALL JOB:PZ IF IN#(35)ON CALL JOB:PZ IF IN#(65)ON JUMP *1 END 1.2 本地程序 1、本地…