考虑对每种胡萝卜和干草建点,从超级源点向第 i 种胡萝卜连容量为 mi 的边,从第 j 种干草向超级汇点连容量为 nj 的边,所有 M×N 组胡萝卜向干草连容量为 1 的边。
答案即最大流。
这样显然过不了(
将 {mi},{ni} 分别升序,设 Sm(i)=i∑j=1mj,Sn(i)=i∑j=1nj。
根据最大流最小割定理,易知需要最小化 Sm(x)+Sn(y)+(M−x)(N−y)。
枚举 x,易知当 y 为最大的满足 ny≤M−x 的 y 时上式取最小值。
双指针或者在值域意义上维护 Sn 均可。
代码:
1 |
|