網路流24題之汽車加油問題

2022-03-27 06:53:29 字數 1211 閱讀 4938

唉,spfa中c寫成w了改了半天。。。

首先這題可以用spfa直接模擬過

但這裡我們是要做網路流的,所以我們還是按照分層圖建網路流

對於乙個狀態d[i][j]表示走到i時還能走j步,然後我們把這個狀態看成乙個點做就行了

by:大奕哥

順便祝各位長沙旅行愉快

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

using

namespace

std;

10const

int n=1e6+10

;11 inline int

read()

14while(ch>='

0'&&ch<='

9')x=(x<<1)+(x<<3)+ch-'

0',ch=getchar();

15return x*f;16}

17int head[n],base=10000,d[n],f[n],p[505][505],cnt=-1

,num,n,k,a,b,c,cost,s,t;

18bool

v[n];

19struct

nodee[10000005

];22

void add(int x,int y,int w,int

c)23

28 queueq;

29bool

spfa()

3045}46

if(d[t]>1e9)return0;

47int flow=1e9;

48for(int i=f[t];i!=-1;i=f[e[i].f])

49 flow=min(flow,e[i].w);

50for(int i=f[t];i!=-1;i=f[e[i].f])

51 e[i].w-=flow,e[i^1].w+=flow,cost+=flow*e[i].c;

52return1;

53}54int

main()

5581}82

else

8391}92

}93while

(spfa());

94 printf("%d"

,cost);

95return0;

96 }

網路流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...