讨论版里有几个帖子指出了本题的一些问题,考虑到这些问题可能有一些讨论价值,开个帖子整合一下。
- 本题没有指出流量和费用的完整值域。
见 228762。
算是非常致命的问题...这意味着流量和费用都可以无穷大。
需要完善数据范围以解决本问题。不过也很难绕过接下来提到的第三个问题。
下面两个问题就和本题没有太多关系了。
- 消圈?
OI 中的绝大多数费用流模型(包括本题)都不存在负环,此时 SSP 算法可以正常求解最小费用最大流。
但是在一些特殊情况下(如 UOJ 487)中会存在负环,此时 SSP 算法无法正确求解,需要先消圈。
另外在这种情况下还会存在一个概念性问题:一个合法的流只需满足容量限制与流量平衡,一个与 s,t 不连通的环也可以有流量。
- SSP 算法的时间复杂度是伪多项式的。
SSP 算法的时间复杂度与增广次数有关,最坏情况下,增广次数可能与最大流同阶。这意味着 SSP 算法无法通过本题数据范围内的所有数据(即使限制了流量的值域)。
目前有不少比 SSP 更优的弱多项式/多项式时间复杂度求解最小费用最大流的算法。如 基于 Capacity Scaling 的弱多项式复杂度最小费用流算法。
不过在 OI 界中,因为数据大多随机,SSP 算法的实际效率还是比较高的。
好了,问题列举的差不多了。
对于本题而言,考虑到本题主要还是用来测试 SSP 的板子,可以考虑在修正数据范围的同时,加上一句保证数据随机。
另外是否有必要开一个增强版的模板来 cover 上面的第二个和第三个问题呢?欢迎各位讨论。