題面:
傳送門思路:
汽車油箱最多只能裝10格油,因此可以依據油量建立分層圖(共11層),然後spfa跑最短路
不用把每一條邊都建出來,用的時候判斷就好了
沒了真是披著網路流外衣的最短路啊
code:
1 #include2 #include3 #include4 #include5#define inf 1000000000
6using
namespace
std;
7 inline int
read()
13while(ch>='
0'&&ch<='
9') re=(re<<1)+(re<<3)+ch-'
0',ch=getchar();
14return re*flag;15}
16const
int dx[5]=,dy[5]=;
17int n,m,k1,k2,k3,a[110][110
];18
int dis[110][110][20];bool vis[110][110][20
];19
struct
que22 que(int xx,int yy,int zz)
23};
24 que q[1000010
];25
void
spfa()45}
46}47}
48}49int
main()
60//
cout<61//}
62for(i=0;i<=m;i++) ans=min(ans,dis[n][n][i]);
63 printf("%d"
,ans);
64 }
網路流24題 汽車加油行駛問題
我們設 dp i k 表示節點為i,現在還有k條邊可以走的狀態。然後跑乙個最短路就行了。因為是不定項更新,所以考慮spfa。注意到了加油站是強制消費。然後分向上下左右四個方向走和原地建加油站五種情況來討論。注意最後更新答案的時候k 0不要忘了考慮!要不然就會像我一樣wa掉乙個點 如下 include...
汽車加油行駛問題 網路流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 座標減...