題目連線:
題面:
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助**給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。
輸入格式:
輸入第一行給出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
題解:dijkstra計算最短路的長度,結果儲存在陣列d中,陣列path記錄最短路的條數。 利用字首陣列pre記錄最短路的路徑,利用棧輸出; 陣列val表示每個點的權值,最短路中權值最大的儲存在陣列tol中。
1 #include2 #include3 #includeview code4 #include5
using
namespace
std;67
const
int inf=0x3f3f3f3f;8
const
int maxn=510;9
intpre[maxn],path[maxn],tol[maxn],val[maxn];
10int
cost[maxn][maxn],d[maxn],used[maxn];
11int
n,m;
1213
void
init()
1419
20void dijkstra(int
s)21
40else
if(d[u]==d[v]+cost[v][u])46}
47}48}
49}50}
5152
void print(int
t)5364}
6566
intmain()
6776}77
for(int i=0;i)
82dijkstra(s);
83 printf("
%d %d\n
",path[t],tol[t]);
84print(t);
85return0;
86 }
緊急救援(Dijkstra 列印路徑)
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入格式 ...
PTA 城市間緊急救援
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入第一行...
L2 001 緊急救援(dijkstra)
作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當其他城市有緊急求助 給你的時候,你的任務是帶領你的救援隊盡快趕往事發地,同時,一路上召集盡可能多的救援隊。輸入格式 ...