PAT 城市間緊急救援(dijkstra)

2021-10-25 00:26:53 字數 1674 閱讀 6319

7-25 城市間緊急救援 (300分)

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

輸入格式:

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

感覺這道題沒有很好的題解,雖然該題與另一道pat甲級的題,基本相似,但是還是記錄一下吧,最起碼,其他人再寫這道題時,有乙個看起來還算舒服的**能夠參考

#include

#include

using

namespace std;

const

int inf=

99999999

;bool visit[

1010];

int w[

1010];

int e[

1010][

1010];

int dis[

1010];

int rode[

1010];

int weight[

1010];

int n,m,s,d;

int pre[

1010]=

;int

main()

for(

int i=

0;i) dis[s]=0

; rode[s]=1

; weight[s]

=w[s]

;for

(int i=

0;iif(u==-1

)break

; visit[u]

=true

;for

(int v=

0;v)else

if(dis[u]

+e[u]

[v]==dis[v])}

}}} cout<<<

" "<

1001];

int cnt=0;

z[cnt]

=d; cnt++

;while

(pre[d]!=-

1)for(

int i=cnt-

1;i>=

0;i--

)}

7 4 城市間緊急救援

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

PTA 城市間緊急救援

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

7 35 城市間緊急救援(25 分)

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