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

2022-03-03 16:13:02 字數 944 閱讀 9539

我們設\(dp[i][k]\)表示節點為i,現在還有k條邊可以走的狀態。然後跑乙個最短路就行了。因為是不定項更新,所以考慮spfa。

注意到了加油站是強制消費。然後分向上下左右四個方向走和原地建加油站五種情況來討論。

注意最後更新答案的時候k==0不要忘了考慮!!(要不然就會像我一樣wa掉乙個點)

**如下:

#include#include#include#include#include#include#define maxn 100010

using namespace std;

int n,k,a,b,c,tot,edge_number,ans=2147483647;

int m[maxn],dp[maxn][20],id[210][210],done[maxn][20],head[maxn*110];

struct node;

struct edgeedge[maxn*110];

inline void add(int from,int to,int dis)

inline void solve()

); dp[id[1][1]][k]=0;

done[id[1][1]][k]=1;

while(!q.empty())

),done[v][yu]=1;}}

}int cur_dis=dp[u][d]+c+a;

if(m[u]==1) cur_dis-=c;

if(cur_dis),done[u][k]=1;}}

}int main()

}solve();

for(int i=0;i<=k;i++) ans=min(ans,dp[id[n][n]][i]);

printf("%d\n",ans);

return 0;

}

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

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

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

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

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

題目傳送門 題目大意 有一張網格圖,起點為 1,1 1,1 1,1 終點為 n,n n,n n,n 汽車滿油時可以走 k kk 步,每步只能沿著網格邊走,如果走到加油站則必須加滿油,費用為 a aa,你也可以在任意地方新建乙個加油站,費用為 c cc,走的過程中,如果 x xx 或 y yy 座標減...