洛谷 1251 餐巾計畫問題 費用流SPFA

2022-04-02 17:22:39 字數 1008 閱讀 9214

題目鏈結

/*

每一天的餐巾需求相當於必須遍歷某些點若干次

設q[i]為dayi需求量 (x,y)表示邊x容y費

將每個點i拆成i,i',由i'->t連(q[i],0)的邊,表示求最大流的話一定要流滿q[i]

對於i,由s->i連(q[i],0)的邊,表示滿足dayi需求後最多還能給出q[i]塊餐巾(感覺inf好像also ok?)

對於三種方式:

購買(花p買一塊餐巾): 由s->i'連(inf,p),表示可以直接花p供給dayi的需求

送到快洗部(a天洗完 每塊花b): 由i->(i'+a)連(inf,b),表示給以一塊花b供給day(i+a)

送到慢洗部(c天洗完 每塊花d): 由i->(i'+c)連(inf,d),表示給以一塊花d供給day(i+c)

注意某天的餐巾可以留到下一天,所以i->i+1連(inf,0)(也可以i'->(i+1)')

也可以貪心+三分...

注意資料(流量)比較大要longlong

*/#include#include#include#include#include#define gc() getchar()

typedef long long ll;

const int n=5000,m=6*n,inf=0x3f3f3f3f;

int n,m,src,des,dis[n],pre[n];

int enum,h[n],nxt[m<<1],fr[m<<1],to[m<<1],cap[m<<1],cost[m<<1];

bool inq[n];

std::queueq;

inline int read()

inline void addedge(int u,int v,int w,int c)

bool spfa()

} return dis[des]}ll mcmf()

int main()

洛谷 1251 餐巾計畫問題

題鏈 題解 一點啟示 建圖時要考慮到流量問題,即為了方便使用最小費用最大流演算法,要把流量最大時為最終目的考慮進建圖。拆點,每天拆為兩個點i,i 表示每天開始和每天結束 s,i,ai,p 在第i天最多買ri個餐巾,花費為p i,t,ai,0 第i天要用ai塊餐巾 s,i ai,0 第i天用剩的ai塊...

洛谷 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 每天結束時,餐...