网络流最小割相关(持续更新)

(12.6)
今天看了下网络流,本想写一篇博客,但是想了想,画图太费劲,证明也不算特别难,那就先咕着了。
前置知识:网络最大流(最好是dinic算法),最大流最小割定理
一、割边最少的最小割
题目:
hdu3987 http://acm.hdu.edu.cn/showproblem.php?pid=3987
hdu6214 http://acm.hdu.edu.cn/showproblem.php?pid=6214 (双倍经验)

方法一:(一次dinic)

我们首先考虑,如何在求最大流的同时兼顾最小割的边数。

第一感觉是类似费用流,给每一条边加一维费用,但仔细思考后发现不用。我们完全可以直接对于每一条边的容量+1,那么最后所求出的最大流一定会保证最小割的边数最少。证明:

设原图最小割为S,那么我们对于每一条边容量+1后,当前图最小割变为S + P(P为最小割的边数),显然可以得到,当P最小时,取得当前图的最小割,即保证了最小割的最少割边。

但是,这样做会改变原图的最小割。当然,我们可以做两次dinic,但是这需要你常数够好不怕卡常。如果我们只做一次dinic,显然我们需要做到的是:去掉边数对答案的影响。这里有一个操作:

将原图中每一条边的容量*(maxp + 1)(maxp为图中最大边数)+ 1

那么当前图的最小割为S * (maxp + 1) + P(P为最小割的边数)

显然P < maxp + 1,那么我们对当前的最小割除以(maxp + 1)就是原图的最小割取模(maxp + 1)就是原图最小割的最少割边

代码不想写了。

方法二:(两次dinic)

我们在第一次dinic求出来最大流时,由于最小割中的边都是满流边,那么问题转化为,最少删掉几条满流边可以使图不连通。

仔细想想,当前那个问题不也是求一个最小割吗?那么我们不妨重新构图(其实只是修改了容量),对于满流边将它的容量改为1,其它边的容量改为无穷大。这样,求出来的最小割即为最少割边啦。

代码也不写啦,都是板子。

二、最小割树

咕咕咕!

你可能感兴趣的:(网络流,最小割)