題目:餐巾計畫問題
思路:拆點,每天拆成收到乾淨餐巾和送出髒餐巾兩部分。
把源點和送餐巾的點連邊,收到餐巾的點和匯點連邊,皆是流量w,費用f。
把每一天收到餐巾和送出餐巾年連邊,流量inf,費用0。
再按照洗和買的條件連邊。
跑費用流即可。
**:
#include
using
namespace std;
#define maxn 5000
#define maxm 1000000
#define read(x) scanf("%d",&x)
#define ll long long
#define inf (1<<30)
struct edge
edge
(int uu,
int vv,
int ww,ll ff)};
int n;
edge e[maxm+5]
;int h[maxn+5]
,nxt[maxm+5]
,cnt=-1
;int p,t1,p1,t2,p2;
void
add(
int u,
int v,
int w,ll f)
void
readin()
read
(p),
read
(t1)
,read
(p1)
,read
(t2)
,read
(p2)
;for
(int i=
1;i<=n;i++)}
ll dist[maxn+5]
;int pre[maxn+5]
;int vis[maxn+5]
,maxw[maxn+5]
;queue<
int> que;
bool
spfa()
}}if(dist[
2*n+1]
!=inf)
return
true
;return
false;}
void
update()
}ll dinic()
return ans;
}int
main()
洛谷 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 每天結束時,餐...
P1251 餐巾計畫問題
題面 一道特別棒的費用流好題,思路非常巧妙 對於每一天,我們分為早上和晚上兩個節點 每天早上會消耗 r i 條乾淨的毛巾,可以視為流向匯點,所以我們向匯點連一條流量為 r i 費用為 0 的邊 每天晚上會產生 r i 條髒毛巾,可以視為從源點流出,所以我們從源點連一條流量為 r i 費用為 0 的邊...