網路流24題 汽車加油行駛 最短路

2021-08-15 22:46:34 字數 822 閱讀 2147

為什麼網路流24題裡會有最短路……

原題走這裡

題目描述比較繁瑣,重點在於如何建圖

題目中乙個重要的點就是「加滿油後可以行駛k格」

可以將其視作為讓汽車油量變為k,汽車每走一格就消耗一單位油,沒油時就要再加油

k<=10一看就知道是分層圖最短路

1~k每一種油量建一層圖

每走一格就會少一單位油,也就是連到下一層圖

加油就是又重新回到k層

spfa即可,這裡寫了個lll

**如下:

#include 

using

namespace

std;

inline

int read()

while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=getchar();

return w?-x:x;

}struct node

};const

int m[4][2]=,,,};

int n,k,a,b,c,d[101][101][11];

bool b[101][101][11],a[101][101];

queue

q;int spfa()}}

else}}

}if(d[x][y][k]>d[x][y][s]+a+c)}}

}int ret=0x3f3f3f3f;

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

return ret;

}int main()

}cout

<}

網路流24題 汽車加油行駛問題

我們設 dp i k 表示節點為i,現在還有k條邊可以走的狀態。然後跑乙個最短路就行了。因為是不定項更新,所以考慮spfa。注意到了加油站是強制消費。然後分向上下左右四個方向走和原地建加油站五種情況來討論。注意最後更新答案的時候k 0不要忘了考慮!要不然就會像我一樣wa掉乙個點 如下 include...

網路流24題 汽車加油行駛問題

題面 傳送門思路 汽車油箱最多只能裝10格油,因此可以依據油量建立分層圖 共11層 然後spfa跑最短路 不用把每一條邊都建出來,用的時候判斷就好了 沒了真是披著網路流外衣的最短路啊 code 1 include2 include3 include4 include5 define inf 1000...

汽車加油行駛問題 網路流24題 SPFA

一開始是想跑bfs 去做,但是後來發現,可以避免這樣的重複進入佇列中,於是,就想著優化bfs,就變成了spfa,優化的量級還是可觀的,至少在我校oj上變成了rank1。才不給你們看我的user名稱呢 略略略 其實也可以看作網路流 就是單位流來做,但是沒必要,建單位流的邊去跑最段路,豈不是直接spfa...