浅谈最大权闭合子图的网络流求法
来源:互联网 发布:软件代码编写规范 编辑:程序博客网 时间:2024/06/05 16:51
问题内容:
有向图里,每个点有点权,点权有负值。对于任意一条有向边i和j,选择了点i就必须选择点j,你需要选择一些点使得得到权值最大
要解决这样一个问题,一看好像很复杂的样子,其实可以转化为网络流的问题,我们可以用最大流最小割定理,来用最大流求最小割,方法是把源点S连向所有正值,把所有负值的绝对值连向汇点T
为什么把原来的边设成INF呢,因为选了i一定要选j,所以i和j一定不能割开,如果是INF,一定不会被割开
而如图所示的情况跑完最大流之后的图应该是这样(流量为0则割掉)
此时已经没有增广路了
最大流为27,正数和为31,则最大权闭合子图的值为31-27=4
原因很显然:
1.我们不可能在i为正数,j为负数的情况下只选一个负数j而不选正数i
2.在选择i,j时,如果j大于i,显然最大流可以限制i点对最大流的贡献最多为该点的权值,因此不可能出现选了一对i,j,并且j的绝对值大于i的情况
3.可以这样思考,一条路径进行增广之后,观察残余网络,如果该边残余在左边,显然该残量是该边对最大全闭合子图答案的贡献,显然在该边的正权值减去该边最大流就是残量(而所有的正权值之和减去整个图的最大流即是整个图的最大全闭合子图的值)
如果右边有残量,那么我们会发现如果选这样的一对i,j,对答案的贡献一定是负的,所以我们不选他,那么怎么处理这个不选呢,之前加上了所有的正权值之和,我们发现该边的最大流显然不能超过左边点的容量,所以如果出现这样的情况,会在加该点的容量后减去最大流(也就是该点的容量)
所以这样的处理方式是正确的
阅读全文
0 0
- 浅谈最大权闭合子图的网络流求法
- 网络流 最大权闭合子图
- BZOJ 3984 浅谈依赖关系的最大权闭合子图网络流建模
- 【BZOJ3158】千钧一发,网络流之最大权闭合子图
- 网络流五·最大权闭合子图
- 网络流——最大权闭合子图
- hihocoder1398 网络流五之最大权闭合子图
- 网络流五·最大权闭合子图 HihoCoder
- 最大权闭合子图的解法
- 最大权闭合子图
- 最大权闭合子图
- 最大权闭合子图
- 最大权闭合子图
- 最大权闭合子图
- 最大权闭合子图
- 最大权闭合子图
- 最大权闭合子图
- 最大权闭合子图
- 练习88
- java内存分配及变量存储
- MySQL 使用mysqldump命令出现错误Binlogging on server not active解决方法
- Android 代码版本控制Git
- 练习89
- 浅谈最大权闭合子图的网络流求法
- STL list和forward_list
- CentOS 7.0最小安装及配置
- 练习90
- RxSwift
- 从头到尾彻底理解傅里叶变换算法
- Vmware克隆Linux虚拟机后网卡修改办法
- PEP8:python编程规范
- android带反弹效果ScrollView