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.pswp.cn/news/162811.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162811.shtml
英文地址,請注明出處:http://en.pswp.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、本地…