把每天分為二分圖兩個集合中的頂點xi,yi
,建立附加源s匯
t。
1、從s向每個xi
連一條容量為
ri,費用為
0的有向邊。
表示第i天還剩ri條餐巾。
2、從每個yi向
t連一條容量為
ri,費用為
0的有向邊。
控制最大流。
3、從s向每個yi
連一條容量為無窮大,費用為
p的有向邊。
表示買餐巾。
4、從每個xi向
xi+1(i+1<=n)
連一條容量為無窮大,費用為
0的有向邊。
表示第i天剩的餐巾可以留給第i+1天。
5、從每個xi向
yi+m(i+m<=n)
連一條容量為無窮大,費用為
f的有向邊。
表示快洗。
6、從每個xi向
yi+n(i+n<=n)
連一條容量為無窮大,費用為
s的有向邊。
表示慢洗。
然後就求最小費用最大流就可以了。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include
8 #include9 #include10 #include11 #include12 #include13 #include14
#define inf 1999999999
15using
namespace
std;
16struct
datae[2610
];19
int head[410],edge=-1,dis[410],vis[410],pre[410
];20
void add(int
from,int to,int w,int
c)27 inline int spfa(int s,int
t)43}44
}45if(dis[t]==zd) return0;
46else
return1;
47}48 inline int end(int s,int
t)58
return
ans;59}
60 inline int solve(int s,int
t)65
intmain()
6682 printf("%d"
,solve(s,t));
83return0;
84 }
網路流 24 題 餐巾計畫
這道題目很關鍵的一點就是,要明白用的餐巾和洗的餐巾是兩個系統。所以我們把每一天所用餐巾直接用乙個源點和匯點連線。解決第乙個系統。此時可能會洗餐巾,所以我們另起乙個點,從源點每一天引出髒的餐巾,數目依然是當天所用的餐巾數量,然後從這個點連線到m天後的第一系統的點和n天後第一系統的點,費用分別為f和s,...
網路流24題 餐巾計畫
乙個餐廳在相繼的n天裡,第i天需要ri塊餐巾 i l,2,n 餐廳可以從三種途徑獲得餐巾。1 購買新的餐巾,每塊需p分 2 把用過的餐巾送到快洗部,洗一塊需m天,費用需f分 f p 如m l時,第一天送到快洗部的餐巾第二天就可以使用了,送慢洗的情況也如此。3 把餐巾送到慢洗部,洗一塊需n天 n m ...
網路流24題 餐巾計畫(費用流)
乙個餐廳在相繼的 n 天裡,每天需用的餐巾數不盡相同。假設第 i天需要 ri 塊餐巾。餐廳可以購買新的餐巾,每塊餐巾的費用為 p 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 n 天,其費用為 s 分 s f 每天結束時,餐廳必須決定將多少塊髒的餐巾送到快...