團體程序設計天梯賽 L2-001 緊急救援(迪杰斯特拉算法)

L2-001 緊急救援

分數 25

作為一個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連接城市的快速道路。每個城市的救援隊數量和每一條連接兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助電話給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。

輸入格式:

輸入第一行給出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

題解

根據題意,很容易想到這是要用最短路算法,但求的不是最短路徑,而是最短路的數目和一堆奇奇怪怪的東西。

最短路的數目可以在判斷最短路的時候就加上去,詳見洛谷P1144最短路計數。

題目還要求在路徑最短的同時還要救援隊最多,那么在遇到兩個同樣長的路徑時,判斷哪條路的救援隊加起來更多,以此作為判斷依據來更新路徑。

最后記錄一整條路徑,輸出就好了。?

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int inf=1e9;
const int N=505;
ll n,m,s,d;
ll dis[N],vis[N];//dis是起點到i點的最短路徑
ll jy[N];
ll ms[N];//最短路徑條數
ll maxjy[N];//沒用上
ll fa[N];//記錄該點的父節點
ll ans[N];//當前點最多的救援隊數量
ll sum;
vector<pair<int,int> > g[N];//用vector存圖
vector<ll> path;//存放路徑
ll out[N];
//迪杰斯特拉算法
void Dij(ll s)
{for(int i=0;i<n;i++){dis[i]=inf;}dis[s]=0;priority_queue<pair<ll,int> > q;for(int i=0;i<n;i++){q.push(make_pair(-dis[i],i));}while(!q.empty()){int u=q.top().second;q.pop();if(vis[u]==1) continue;vis[u]=1;for(int i=0;i<g[u].size();i++){int v=g[u][i].first;int w=g[u][i].second;if(dis[v]>dis[u]+w)//是最短路就更新{dis[v]=dis[u]+w;ms[v]=ms[u];fa[v]=u;ans[v]=ans[u]+jy[v];q.push(make_pair(-dis[v],v));}else if(dis[v]==dis[u]+w)//遇到同樣短的路{ms[v]+=ms[u];if(ans[v]<ans[u]+jy[v])//判斷誰的救援隊多{fa[v]=u;//更新ans[v]=ans[u]+jy[v];}}}}
}
//記錄路徑
void getPath(ll s,ll d)
{path.push_back(d);while(d!=s){d=fa[d];path.push_back(d);}reverse(path.begin(),path.end());int i=0;for(auto k:path){i++;out[i]=k;}
}
int main()
{cin>>n>>m>>s>>d;for(int i=0;i<n;i++){cin>>jy[i];}while(m--){int x,y,w;cin>>x>>y>>w;//雙向存圖g[x].push_back(make_pair(y,w));g[y].push_back(make_pair(x,w));}//初始化ms[s]=1;ans[s]=jy[s];Dij(s);getPath(s,d);//輸出cout<<ms[d]<<" ";cout<<ans[d]<<endl;for(int i=1;i<=path.size()-1;i++){cout<<out[i]<<" ";}cout<<out[path.size()]<<endl;return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711260.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python筆記_運算符

A&#xff0c;算術運算符 運算符描述舉例結果加011-減2-11*乘1*11/除1/11%取模&#xff08;取余&#xff09;6%51&#xff08;余1&#xff09;//除&#xff0c;且向下取整 3//2 -1//2 1 -1 **返回x的y次冪2**01 取模運算公式 a % b a - a // b * b print&#xff08;-10%…

【復現】藍凌OA SQL注入漏洞_61

目錄 一.概述 二 .漏洞影響 三.漏洞復現 1. 漏洞一&#xff1a; 四.修復建議&#xff1a; 五. 搜索語法&#xff1a; 六.免責聲明 一.概述 藍凌智能OA是由深圳市藍凌軟件股份有限公司開發&#xff0c;是一款針對中小企業的移動化智能辦公產品&#xff0c;融合了釘釘數字…

C習題002:澡堂洗澡【僅供參考】

問題 輸入樣例 在這里給出一組輸入。例如&#xff1a; 2 5 1 3 3 2 3 3 輸出樣例 在這里給出相應的輸出。例如&#xff1a; No代碼長度限制 16 KB 時間限制 400 ms 內存限制 64 MB 棧限制 8192 KB 代碼 #include<stdio.h> int main() {int N,W,s,t,p;int arr_s[…

遞歸算法題練習(數的計算、帶備忘錄的遞歸、計算函數值)

遞歸的介紹 概念:遞歸是指函數直接或間接調用自身的過程。 解釋遞歸的兩個關鍵要素: 基本情況(遞歸終止條件):遞歸函數中的一個條件&#xff0c;當滿足該條件時&#xff0c;遞歸終止&#xff0c;避免無限遞歸。可以理解為直接解決極小規模問題的方法。遞歸表達式(遞歸調用):遞…

k8s 中 namspace deployment pod services 之間的關系

在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Namespace&#xff08;命名空間&#xff09;是一種用于將集群內部資源劃分為不同邏輯組的機制。Deployment、Pod和Service是Kubernetes中常見的資源&#xff0c;它們之間的關系如下&#xff1a; Namespace&#xff08;命…

網絡安全攻防演練:企業藍隊建設指南

第一章 概述 背景 網絡實戰攻防演習是當前國家、重要機關、企業組織用來檢驗網絡安全防御能力的重要手段之一,是對當下關鍵信息系統基礎設施網絡安全保護工作的重要組成部分。網絡攻防實戰演習通常是以實際運行的信息系統為攻擊目標,通過在一定規則限定下的實戰攻防對抗,最…

認識通訊協議——TCP/IP、UDP協議的區別,HTTP通訊協議的理解

目錄 引出認識通訊協議1、TCP/IP協議&#xff0c;UDP協議的區別2、HTTP通訊協議的講解 Redis沖沖沖——緩存三兄弟&#xff1a;緩存擊穿、穿透、雪崩緩存擊穿緩存穿透緩存雪崩 總結 引出 認識通訊協議——TCP/IP、UDP協議的區別&#xff0c;HTTP通訊協議的理解 認識通訊協議 …

第九屆數學與人工智能國際會議 (ICMAI 2024)即將召開!

2024年第九屆數學與人工智能國際會議將于2024年5月10-12日在中國北京召開。本屆會議由北京工業大學主辦&#xff0c;旨在促進應用邏輯、算法與復雜性研究&#xff0c;使用數學的方法促進人工智能理論與應用發展&#xff0c;加深學術交流與合作。我們熱忱歡迎從事相關技術研究的…

開源WIFI繼電器之使用說明

1、設備說明 1.1外觀 1.2供電 100~240V交流輸入&#xff0c;Lin接火線&#xff0c;Nin接零線。 1.3連接負載 輸出信號為繼電器無源信號&#xff0c;用于信號的導通和斷開控制&#xff0c;最大可通過10A負載電流&#xff0c;COM為繼電器公共端&#xff0c;NO為繼電器常開端&a…

藍牙耳機推薦高性價比,五大超好用藍牙耳機推薦,趕緊上車!

?隨著技術的不斷進步&#xff0c;藍牙耳機的性能和配置也在不斷提升&#xff0c;各大品牌都在推出具有各種特色的產品。其中&#xff0c;音質是很多消費者最為關注的一點。因此&#xff0c;我在這里為大家推薦幾款音質表現還不錯的幾款藍牙耳機&#xff0c;供大家參考。 一、挑…

SpringAOP

1. SpringAOP的基本概念 SpringAOP&#xff08;Aspect-Oriented Programming&#xff09;即面向切面編程&#xff0c;是Spring框架體系中非常重要的功能模塊之一。AOP與OOP&#xff08;面向對象編程&#xff09;相輔相成&#xff0c;提供了一種與OOP不同的抽象軟件結構的視圖。…

Java畢業設計 基于SSM SpringBoot vue購物比價網站

Java畢業設計 基于SSM SpringBoot vue購物比價網站 SSM vue 購物比價網站 功能介紹 首頁 圖片輪播 商品 商品分類 商品詳情 評論 收藏 商品攻略 商品信息 公告欄 在線反饋 登錄 注冊 個人中心 我的收藏 后臺管理 登錄 注冊商品戶 個人中心 修改密碼 個人信息 商品戶管理 用戶…

IDC 中搭建 Serverless 應用平臺:通過 ACK One 和 Knative 玩轉云資源

作者&#xff1a;元毅、莊宇 如何打造云上&#xff08;公共云&#xff09;、云下&#xff08;IDC 數據中心&#xff09;統一的云原生 Serverless 應用平臺&#xff0c;首先我們來看一下 ChatGPT 4 會給出什么樣的答案&#xff1a; 如何打造云上、云下統一的云原生 Serverless…

【CesiumJS-3】加載傾斜模型數據(3DTilest)以及修改位置

引入傾斜模型數據 // 加載3DTiles數據let tileset;try {tileset await Cesium.Cesium3DTileset.fromUrl("/api/3DTiles/b3dm_qx/tileset.json");viewer.value.scene.primitives.add(tileset); // 傾斜模型添加到場景中viewer.value.zoomTo(tileset); // 視角定位到傾…

【音視頻處理】使用ffmpeg實現多個視頻合成一個視頻(按宮格視圖)

先上結果 環境 硬件&#xff1a;通用PC 系統&#xff1a;Windows 測試有效 軟件&#xff1a;ffmpeg 解決 0、命令 ffmpeg.exe -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "[0:v]scaleiw/2:ih/2,pad2*iw:2*ih[a]; [1:v]scaleiw/2:ih/2…

GO學習記錄

這里寫目錄標題 00 環境二級目錄三級目錄 00 環境 參考的&#xff1a;https://www.liwenzhou.com/posts/Go/install/ 編譯運行&#xff1a; go mod init <項目名> // 在目錄下創建項目 go mod init hello // 編譯二級目錄 三級目錄

BioTech - 大分子藥物設計 概述

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/136302202 大分子藥物設計領域主要包括3個方面&#xff0c;即大環類藥物設計、蛋白質與多肽類藥物設計、核酸藥物設計等&#xff0c;具體如下&…

selenium控制控件出現StaleElementReferenceException

attempts0while attempts<2:try:ywbh_text self.getElement(self.driver, //*[id"board_data"]/tbody/tr[1]/td[2])ywbh_text.click()config.zscjhbgbz_ywbh ywbh_text.textprint("保存業務編號&#xff1a;"ywbh_text.text"到conf中 zscjhbgbz_…

DolphinScheduler——奇富科技的調度實踐

目錄 一、技術架構 二、業務挑戰 2.1 調度任務量大 2.2 運維復雜 2.3 SLA要求高 三、調度優化實踐 3.1 重復調度 3.2 漏調度 3.3 Worker服務卡死 3.4 任務重復運行 四、服務監控 4.1 方法耗時監控 4.2 任務調度鏈路監控 五、用戶收益 原文大佬的這篇調度系統案例…

nginx使用詳解--緩存

Nginx 是一個功能強大的 Web 服務器和反向代理服務器&#xff0c;它可以用于實現靜態內容的緩存&#xff0c;緩存可以分為客戶端緩存和服務端緩存。 客戶端緩存 客戶端緩存指的是瀏覽器緩存, 瀏覽器緩存是最快的緩存, 因為它直接從本地獲取(但有可能需要發送一個協商緩存的請…