网络流——最大权闭合子图

网络流的一类经典模型。

给出一张有向图 G = ( V , E ) G=(V,E) G=(V,E),你要选定一个点集 A A A,对于任意 x ∈ A x\in A xA,若存在 ( x , y ) ∈ E (x,y)\in E (x,y)E,那么一定有 y ∈ A y\in A yA,你要使 A A A 中的点权值和最大。

先将点分为两类,正权点和负权点。

考虑如何构建网络,建立超级源 S S S 和超级汇 T T T,令 S S S 向正权点连边,流量为权值,负权点向 T T T 连边,流量为权值的相反数。对于原图中的边 ( x , y ) (x,y) (x,y),我们也建出来,流量为 ∞ \infty

那么跑完网络流之后,这张图会分成两份,一份是和源点 S S S 连着的,一份是和汇点 T T T 连着的。显然,和源点连着的,就是一个闭合子图,因为中间的边流量无穷大,不可能被割掉,所以与 S S S 连着的实验的后继都在这个图中。

那么考虑计算与 S S S 相连的这张子图的收益。

先放一张图,表示跑完网络流后的图(很丑,轻喷QAQ):
在这里插入图片描述
就像这样分成两块, S S S 中有正点也有负点,那么收益就是正点的权值和负点的权值和

发现这两个东西都不好求,于是转化一下。

先列一下我们有的量:

  1. 这张图的割是 T 正 + S 负 T_正+S_负 T+S
  2. 这张图的所有正点的权值和(显然可以预处理),即 S 正 + T 正 S_正+T_正 S+T

而我们现在需要求: S 正 − S 负 S_正-S_负 SS

显然,用正点的权值和减去割就是我们要的答案。

但现在还有一个要求,我们要收益尽可能大,也就是 S 正 − S 负 S_正-S_负 SS 尽可能大,也就是正点的权值和减去割尽可能大。

发现正点的权值和是固定的,那我们只需要求一个尽可能小的割,根据最大流最小割定理,我们只需要求出这张图的最大流就好了。

模板题及代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值