分配需要菜品给厨师,某个厨师做的第 $k$ 道菜,则他的等待时间就是这个厨师制作前$k$ 道菜的时间之和,求最小等待时间。
这是一道非常好的动态加点的费用流题目。
一开始的想法是考虑倒过来做菜,先考虑每个厨师菜的最小时间,然后做掉,接下来打上标记,即接下来做菜都是$\times 2$,依次递推即可。
显然不对$2,100$与$2,3$,但是如果厨师做一道菜又是最优的解决。
但是费用流,是有反向边的,如果这个不是最优,明显$s\rightarrow 100\rightarrow2\rightarrow 2\times 2$这样就可以保证最小了。
所以在$MCMF$基础上,每次增广动态加点。
边数的规模是 $\mathcal{O}(mp)$,点数$O(n+m+p)$ 的。
代码
1 |
|