P1251 餐巾計畫問題

2022-09-20 12:39:10 字數 1302 閱讀 7795

因為髒的衣服在一天結束時才會有,乾淨的一天開始才會有,考慮拆點。

再考慮乾淨的衣服都是要被收集起來的,所以乾淨的要流向超匯。而髒的衣服可以從超源免費獲得所需要的個數,而乾淨的衣服只能購買。

看張圖吧,假如只有 1 個點的話,且需要無限多的衣服。

顯然前者正確,後者矛盾(收集了髒衣服)

再者,這種建圖會無法收集到當天的髒衣服。

假如從 t 點再回來也不現實,所以只能從 s 供給了。

因為最後一定滿流,所以從 s 供給髒衣服是正確的。

#include using namespace std;

int rd()

while(isdigit(ch))

return sum*f;

}#define int long long

#define n (int)(4e4+5)

#define inf (int)(2e18)

struct edge e[n<<1];

int hea[n],cnt=1;

int n,s,t,ans;

void add_edge(int x,int y,int z,int c)

void add(int x,int y,int z,int c)

dequeq;

bool vis[n];

int dis[n];

bool spfa()

}} }

return dis[t]

}int dfs(int x,int lim)

} if(!flow) dis[x]=inf;

vis[x]=0;

return flow;

}void dinic()

}int a[n];

signed main()

x=rd();

for(int i=1;i<=n;i++) add(s,i,inf,x);

x=rd(); y=rd();

for(int i=1;i<=n;i++)

x=rd(); y=rd();

for(int i=1;i<=n;i++)

for(int i=1;i

dinic();

cout<

return 0;

}

P1251 餐巾計畫問題

題面 一道特別棒的費用流好題,思路非常巧妙 對於每一天,我們分為早上和晚上兩個節點 每天早上會消耗 r i 條乾淨的毛巾,可以視為流向匯點,所以我們向匯點連一條流量為 r i 費用為 0 的邊 每天晚上會產生 r i 條髒毛巾,可以視為從源點流出,所以我們從源點連一條流量為 r i 費用為 0 的邊...

洛谷 P1251 餐巾計畫問題

吃什麼 先說建圖 經典構圖題。將每一天拆成兩個點i,i 加如下6條邊 s i,r i,p 在第 i 天可以買至多ri 個餐巾,每塊 p 分 i t,r i,0 第i 天要用ri 塊餐巾 s i ri,0 第 i 天用剩的ri 塊舊餐巾 i i m,f 第 i 天的舊餐巾送到快洗部,每塊 f分 i i...

洛谷 P1251餐巾計畫問題 題解

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