網路流24題 餐巾計畫問題 題解

2021-10-23 02:22:33 字數 1242 閱讀 9184

題目傳送門

題目大意:第 i

ii 天你需要 a

ia_i

ai​ 塊餐巾,可以選擇買新的或用之前洗好的,每天用完的髒餐巾可以選擇快洗或慢洗,洗完後可以繼續用,要求費用最小。

考慮將每一天拆成兩個點,那麼就得到了兩列點,源點向左邊的點連邊,流量為 a

ia_i

ai​ 費用為 0

00,表示第 i

ii 天的晚上剩了 a

ia_i

ai​ 塊髒餐巾,右邊的點向匯點連邊,流量費用一樣,表示第 i

ii 天的白天需要 a

ia_i

ai​ 塊餐巾。

那麼快洗部和慢洗部的連邊就很明顯了,甚至多來幾個部也不是問題,要洗幾天,就讓左邊的點 i

ii 向右邊的點 i+天

數i+天數

i+天數

連邊即可,流量無限,費用對應。

買新餐巾的話就直接讓源點和右邊的點連邊,流量無限,費用為新餐巾的費用。

**如下:

#include

#include

#include

using

namespace std;

#define maxn 4010

#define inf 999999999

#define ll long long

int n,a[maxn]

,s,t;

struct edge

;edge e[

100010];

int first[maxn]

,len=1;

void

buildroad

(int x,

int y,

int z,

int cost)

; first[x]

=len;

}int q[maxn]

,st,ed,fa[maxn]

,f[maxn]

;bool v[maxn]

;bool

spfa()

} v[x]

=false;}

return fa[t];}

signed

main()

ll ans=0;

while

(spfa()

)printf

("%lld\n"

,ans)

;}

網路流24題 餐巾計畫問題

傳送門 這個題我一開始沒把tot賦值成 1,然後調了1h。然後只拿了20,看了題解才知道漏了一種情況,那就是其實餐巾是可以留到第二天的。然後就沒了。對了,忘說做法了 尷尬 其實就是拆點,分別連邊,實現題目中的三種操作,具體可以看我的 include include include include i...

網路流24題餐巾計畫問題

乙個餐廳在相繼的 n n 天裡,每天需用的餐巾數不盡相同。假設第 i role presentation i i天需要 ri r i塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 p p 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 n r...

網路流24題 餐巾計畫問題

一道建模稍微有難度的網路流,首先你需要考慮到拆點,確實有點難度,你需要把一天拆成乾淨餐巾和骯髒餐巾,因為髒餐巾是可以轉化為乾淨餐巾的,你需要做到這個過程,所以你需要拆點,其次難想到的應該是如何解決快洗部和慢洗部每次只能洗一件並且需要洗多天,如何安排哪天的餐巾去洗就是個問題,所以可以考慮每天的餐巾都可...