團體程式設計天梯賽 L2 001 緊急救援

2021-10-02 04:11:01 字數 1464 閱讀 3730

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

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

模板題,就是把最短路每乙個知識點都考了一下,不難,ac**如下:

#include

using

namespace std;

typedef

long

long ll;

const

int n=

505;

const

int inf=

99999999

;int g[n]

[n],weight[n]

,d[n]

,num[n]

,vis[n]

,w[n]

,pre[n]

;int n,m,u,v,l,s,e;

void

print

(int v)

print

(pre[v]);

printf

(" %d"

,v);

}void

dijstra()

}if(u==-1

)break

; vis[u]=1

;for

(int v=

0;v)else

if(d[u]

+g[u]

[v]==d[v])}

}}}}

intmain()

d[s]=0

; w[s]

=weight[s]

; num[s]=1

;dijstra()

; cout<<<

" "<

(e);

return0;

}

天梯賽 L2 001 緊急救援

好氣,最後4分怎麼也得不上,還沒找出bug,此 還不完全正確,明天再找,好長時間不打感覺好生疏。思路關鍵在求最短路徑的條數,一般我是跑兩遍bfs來做。感覺通俗一些。越寫越醜 1 include 2 include 3 include 4 include 5 include 6 using names...

PAT 天梯賽 L2 001 緊急救援

時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越作為乙個城市的應急救援隊伍的負責人,你有一張特殊的全國地圖。在地圖上顯示有多個分散的城市和一些連線城市的快速道路。每個城市的救援隊數量和每一條連線兩個城市的快速道路長度都標在地圖上。當...

天梯賽L2 001 緊急救援 25 分

題目中已經明確要求最短路,因此最短路演算法也就不可或缺 int map 500 500 int u,v,w for int i 0 i m i struct nodearr 500 int u,v,w for int i 0 i m i struct edgearr 500 用於記載每一條邊 int...