最短路因為還要求最短路徑的個數和最大救援人數
對於每個節點和每個節點的前乙個節點,理想的方法是和藍橋杯第五題一樣,結構體裡增加三個記錄資訊,這道題就是要增加乙個最短路徑的個數和當前最大救援隊數的資訊和每個節點的前乙個節點。
但我們存圖的方式不是存點,而是存邊,所以只能額外開乙個陣列tot,記錄起始點到每個點的最短路徑的個數;再開乙個陣列sum,記錄每個點當前最大救援隊數;再開乙個pre記錄每個節點的前乙個節點。
#include
#include
#include
#include
#include
using namespace std;
const
int maxn =
505;
int n, m, s, e;
// nums:每個點人數,d:每個點到原點距離
int nums[maxn]
, dist[maxn]
;// tot:起點到點i最短路的條數, sum:起點到點i人數
int tot[maxn]
, sum[maxn]
;int pre[maxn]
;bool vis[maxn]
;vectorint,
int>
> e[maxn]
;void
dijkstra()
);// 鬆弛
while
(!q.
empty()
)// 可以鬆弛:更新距離,更新可以到達的路徑個數,更新最大救援數
if(dist[v]
> dist[head]
+ curdist));
}}}}
void
output
(int x)
int main ())
; e[b]
.push_back()
;}tot[s]=1
; sum[s]
= nums[s]
;dijkstra()
; cout << tot[e]
<<
" "<< sum[e]
<< endl;
output
(e);
return0;
}
L2 001 緊急救援 (25 分)
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入第一行...
L2 001 緊急救援 (25 分
l2 001 緊急救援 25 分 作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路...
L2 001 緊急救援 25 分
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入第一行...