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

2022-04-29 07:06:08 字數 1165 閱讀 2170

題面戳我

題面描述

乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾(i=l,2,…,n)。餐廳可以從三種途徑獲得餐巾。

(1)購買新的餐巾,每塊需p分;

(2)把用過的餐巾送到快洗部,洗一塊需m天,費用需f分(fm),費用需s分(s輸出樣例#1:

64
說明

n<=2000

ri<=10000000

p,f,s<=10000

時限4s

網路流24題裡面很有意思的乙個建圖

因為每天最終的ri是固定的,所以我們可以直接假設每天都有ri塊舊餐巾。

每天拆成兩個點,新建源點匯點\(s\),\(t\)。

\(s\)連向\(i'\),\(i\)連向\(t\),均容量\(r_i\)費用0;

\(s\)連向\(1\)容量\(inf\)費用\(p\),其餘\(i-1\)連向\(i\)容量\(inf\)費用0;對應購買餐巾(可以當做是第一天買了所有餐巾,然後餐巾可以留到以後去使用)

\(i'\)分別連向\(i+m\)和\(i+n(i+m,i+n<=n)\),容量\(inf\)費用對應\(f\)或\(s\)。(快洗或慢洗)

建完圖跑費用流。

#include#include#include#includeusing namespace std;

#define inf 1000000000

const int _ = 100005;

struct edgea[_<<1];

int n,r[_],p,m,f,n,s,s,t,head[_],cnt=1,dis[_],vis[_],pe[_],pv[_];

long long ans;

queueq;

int gi()

void link(int u,int v,int w,int cost)

; head[u]=cnt;

a[++cnt]=(edge);

head[v]=cnt;

}bool spfa()

} vis[u]=0;

} return dis[t]}int main()

while (spfa())

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

return 0;

}

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

最小費用最大流 建圖方式真麻煩 真是網路流裡的泥石流清流啊 老規矩 先建立超源點s和超匯點e 對於每一天 我們可以拆成2個點 乙個點稱為1號連線s 另外乙個稱為2號連線e 流量都是當天餐巾 費用0 由於我們可以不洗餐巾所以可以直接連線下一天 倆一號點連線 費用為0 流量inf 注意邊界 我們可以買餐...

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

寫網路流寫的頭昏腦漲qaq大概還是太菜了 比較有趣的建圖題 對於每乙個點拆點拆成早晨和晚上分別為 i 和 i 1.s i r,p 每天早晨可以買最多r條新餐巾 一條p分 2.s i r,0 每天用剩下r條髒餐巾 沒有代價 3.i t r,0 每天要用r條乾淨餐巾 沒有代價 4.i i m inf,f...

線性規劃與網路流24 餐巾計畫問題

題目鏈結點這裡 犯了個智障錯誤,找錯找了一上午,最小費用問題,建模對於我這種菜雞有點難想到。大概這樣建模 把第i天,分為2個點 xi和yi 1 從s向每個xi連一條容量為ri,費用為0的邊。2 從每個yi向t連一條容量為ri,費用為0的邊。3 從s向每個yi連一條容量為無窮大,費用為p的邊。4 從每...