给定一个网络流和数字k,要求减去k条边使最大流最小
如题
给定一个网络流G=(V,E)以及一个数字k,其中k不大于|E|,每条边的权值都是1,求一个多项式算法,使得G减去k条边后的最大流最小
求各位大大给个伪代码
[解决办法]
这图就是最小割转出来的图吧……
如果删去某个最小割上的边e,则删去以后的最小割一定少了1(证明见后)。所以如果原来最大流是M的话,答案就是max(0,k-m)。要求具体删去哪些边能到这个结论的话就要跑k次最大流,每次找到一条最小割上的边然后删掉。
刚才某个命题的证明如下:假设G'是G删去e的边以后的流,S是某个最小割并且e在S中。那么G的maxflow=流经S的流的和。由于G'可以看成是G的拷贝,并且把e的容量改成0,那么G'的maxflow也是流经S的流的和。但是如果e的容量减去1,流经S的流的和也会至少减去1。而同时,G删去一条边以后maxflow至多减去1。所以去掉最小割上的边,maxflow正好减去1。