P4249 [WC2007]剪刀石头布
在一个竞赛图上一些边的方向已经确定,但是还有一些边的方向没有确定,求解最多有多少三元环。
首先看到三元环个数,按照套路我们利用度数计算,然后考虑每一条边,每一条边的贡献就是使两个点中的一个度数加1,那么对于答案贡献就是减少原有度数个三元环。这看上去就像是一个匹配问题,并且有费用,所以我们需要利用费用流。
但是现在的问题就是每一次减少的个数会发生改变,也就是说流到一个点的费用和次数有关,所以我们不能直接建一条边处理了。由于每一次流的费用是递增的,所以我们可以建n条边流量都是1,费用从度数开始递增,这样由于我们每一次都要求最小化费用,所以每一次都是选择最小的边流。
有点像是最优性问题的一个思路,将限制放宽但是保证每一次都选择的是最优的。
流过次数不同可变边权的费用流