最短路 記錄路徑 變形!!

2021-07-14 10:18:20 字數 1294 閱讀 8987

時間限制

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

最短路就不用說了,這個題還需要記錄揹包,所以也就是乙個最大生成樹的問題?有點這個意思,還有乙個記錄路徑,感覺和並查集的感覺一樣,一直往回追溯!!#include #include #include#include#define maxx 0x3f3f3f3f;

using namespace std;

int thing[505];//物品

int a,b,c,d;

int sum1[505];//總物品數量

int sum2[505];//路徑數量

int road[505];//最短路

int path[505];//記錄路徑

int re[505];//輸出路徑

int vis[505];//標記是否可行

void init()

void dijkstra(int x)

最短路變形 偷懶路徑

呆子打算去上自習,雖然他不願意。他來到五教門口時,發現他來遲了,事先又沒有佔位子,可能沒有位子了。根據經驗,他知道每個小教室有位子的概率為p1,每個梯形教室有位子的概率為p2,每個扇形教室有位子得概率為p3。由於他並不是真的想上自習,所以他並不打算到每個教室去找位子,而是選一條從前門走到後門的路徑,...

變形最短路

有沒有感覺神似 acmer的出行計畫 我們知道dijkstra是貪心策略的dp嘛,貪心的是距離 然而有時除了距離還有別的限制,在這裡是油。這時候花費最小不一定是最優,還要考慮剩餘的油 dp i,j 表示到i點時剩餘j油時最少的花費 在乙個點可以選擇向下走 油夠的情況 或者加1份油 多次加乙份油就相當...

歐濤最短路 記錄最短路徑

就是普通的最短路,建圖時點的距離小於m的連雙向邊,自認為寫了很多最短路卻不知道怎麼記錄最短路的路徑。在鬆弛裡記錄就好了,每次鬆弛都記錄被鬆弛點的前驅,這樣當乙個點多次鬆弛的時候,就可以多次更新它的前驅,當它無法鬆弛時就是最短路徑上的點,也就是記錄下來的最後一次鬆弛的前驅。然後從終點開始遍歷前驅,存在...