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

(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,其它边的容量改为无穷大。这样,求出来的最小割即为最少割边啦。

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

二、最小割树

咕咕咕!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值