又是一道有意思的网络流。
传送门
数据输入格式略有不同
题解
此题重点在于建模。
首先很显然这题是一个费用流。
但是建模不是很好搞,需要绕几个弯。
首先拆点,将每一天分为早上和下午,早上需要准备好$r_i$块干净的餐巾,晚上又免费获得了$r_i$块脏的餐巾。
于是乎可以这样建图:
从源点连出$n$条边(绿的那些)到早上(下面那一排点),容量为$+\infty$,代价为$p$。如果需要买新的餐巾,从这些边流过来。
表示早上的$n$个点再连出来$n$条边到汇,容量为$r_i$,代价为$0$。正常情况下这些变必须满载。表示每天早上都可以提供$r_i$条干净的餐巾。
从源点再连出来$n$条边到每一个表示晚上的节点(上面一排),容量为$r_i$,代价为$0$。表示每天晚上可以免费获得$r_i$条脏餐巾。这些边不一定满载,因为脏的餐巾可以扔掉。
表示每一天晚上的节点再连出来一条边到下一天晚上(红的边),容量为$+\infty$,代价为$0$。当天的脏餐巾可以放到下一天再处理。
- 表示每一天晚上的节点连出一条边到$m$天后的早上(蓝的边),容量为$+ \infty$,代价为$f$。表示送去快洗部。
- 送去慢洗部的同上。
然后直接刷最小费用最大流即可。
代码
1 |
|