之前学到手纯正网络流,但是当然真正比赛不可能这么简单啦。自然带带下界。那怎么办呢?
根据ACM—ICPC程序设计 图论及应用书上提及:
假设有一个流图如下图 5.6:
求满足S到T的最大流。
我们将建立超级源汇X,Y操作如下图:
将所有边的下界都链接到X,然后减去原边下界的值。比如S-A原来上界是6下界是2,那么去掉下界后,S-A的上界应应该变为4.并相应链接Y-A值也为下届。其他边都做相同操作就有了图5.9的新图。其实这和原图是等价的。
上面的操作是假设成下界被流满,那么在满足下界最低要求后再求新图的最大流,两次最大流的值想加即为满足要求的最大流。
怎么确定下界是否被流满?就是新加入的超级源汇的功劳,第一次最大流从Y到X,这里要加一条T-S无限上界的边(因为第一次最大流是Y-X,翻过来的,所以你在T-S要加反向无限制的边保证Y出去的边都能流出)。只要第一次最大流可以满足Y的出边都流满了,就能确定原图的最大流是一定存在的。因为X的入边流量和 和 Y的出边流量和 是想等并且表示为原图的所有下界和。既然下界最低要求满足,自然就有最大流的解。最后去掉T-S这个边,从S-T再做一次最大流,也就表示了从剩余网络找一次最大流,相当于在满足了最低要求最大流后是否还能再增大。说到这里也就明白为什么原图的上界要构新图要减去下界了。
这本书说的这个办法很巧,也用实例验证了。留底做以后参考回忆。