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
題目太坑,題目要求我們先輸出最短路徑的條數,如果有多條,輸出召集人數最多的那一條,就是基本最短路問題,只不過在求最短路相等的時候在考慮一下人數這乙個條件,而且需要再開乙個陣列記錄一下最短路的條數,而且我還犯了另乙個錯誤,就是把路徑用字串儲存起來,這和我做天梯地圖那道題犯的錯誤一樣,希望我能從其中吸取教訓。
#include
using
namespace std;
const
int maxn=
1e3;
//如果寫的是這中形式的話在更新的時候就需要判斷一下是否能到達
//否則不能到達時加一下整形就溢位了 ,不過鏈式向前星儲存方式存的就是可達的
const
int inf=
0x3f3f3f3f
;struct edgeedge[maxn*maxn]
;int head[maxn]
,dis[maxn]
,vis[maxn]
,ans[maxn]
,pre[maxn]
,cnt[maxn]
;int s,e,tot,n,m;
int a[maxn]
;void
init()
void
addedge
(int u,
int v,
int c)
int sum=0;
void
dijkstra()
}if(u==-1
)break
; vis[u]=1
;for
(int j=head[u]
;j!=-1
;j=edge[j]
.next)
elseif(
!vis[v]
&&dis[v]
==dis[u]
+edge[j]
.c)}}}
}int
main()
for(
int i=
0;i)dijkstra()
;int t=0;
int k=e;
int str[maxn]
;while(1
) cout<<<
" "<
int i=t-
1;i>=
0;i--
)}
L2 1 緊急救援
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者陳越 作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當...
L2 001 緊急救援
這道題就是一道最短路 dijkstra演算法 將模板稍作修改就行了,就是再另外加乙個記錄路線條數的陣列 即當路的長度與下乙個需要判斷的 節點的長度相等時路線就相加 和乙個記錄每個節點在最短路基礎上的車的總數量的陣列,然後就ok了,如下 include include include define m...
L2 001 緊急救援
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入格式 ...