L2 1 緊急救援 題目詳解

2021-07-11 08:55:27 字數 2202 閱讀 1368

時間限制

200 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者陳越

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

輸入格式:

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

這題是一題求最短路的題目,但是還要求不同路徑的條數,所以想到用dfs 回朔法,中間要剪枝,已提公升速度,並且記錄路徑;

但是 如果只用dfs回朔剪枝回發現最後乙個測試點通不過,超時了,速度還要優化;
這就想到,先用dijkstra先求一下到終點距離以內的最短路,以外的就不管了,而且通過標記陣列temp排除他們;
再把每個點最短距離拿去dfs剪枝,速度就提公升上來了;
#include

#include

#include

#include

#include

using

namespace std;

int n, m, s, d;

int **city;

int temp[500];//記錄這個點有沒有被訪問過,在dfs中為1則不用訪問.dijkstra為0不用訪問;

int people[500];//存放每個城市救援隊數量;

int path[500] = ;//用來記錄路徑,path[i]代表i點前面乙個點;

int pp = 0, dd = 0;//pp是現在救援隊數量,dd是目前走的距離,在dfs中用到;

int mini = 99999;//起點到終點最短距離;

int maxx = 0;//最大救援隊數量

int num = 0;

int diss[500];//存放s到i點最短路長度的陣列;

stack sta;//用來記錄路徑的棧

int dfs(int x)

} temp[x] = 1;

for (int i = 0; i < n; i++)

}temp[x] = 0;

return1;}

class

node

};//優先佇列用到的node結點

int dijkstra(int s)}}

int main()

for (int i = 0; i < n; i++)

cin >> people[i];

for (int i = 0; i < m; i++)

pp = people[s];

mini=dijkstra(s);//算得到終點的最短路長度;並且記錄下每個最短路範圍內,每個點最短路長度;

dfs(s);//用dfs,並且回朔剪枝 ,求路的條數和最大救援數;

cout << num << "

" << maxx << endl;

if (!sta.empty())

cout << sta.top(), sta.pop();

while (!sta.empty())

//fclose(stdin);

}

L2 1 緊急救援

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

L2 001 緊急救援

這道題就是一道最短路 dijkstra演算法 將模板稍作修改就行了,就是再另外加乙個記錄路線條數的陣列 即當路的長度與下乙個需要判斷的 節點的長度相等時路線就相加 和乙個記錄每個節點在最短路基礎上的車的總數量的陣列,然後就ok了,如下 include include include define m...

L2 001 緊急救援

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