[学习笔记]最小割之最大权闭合子图

这篇博客不错,言简意赅一针见血

网络流——最小割求最大权闭合子图

 

对于这样的一类问题:

 

有一些点,每个点有点权,点权可正可负。

对于图中的任意一条有向边i和j,代表如果选择了点i就必须选择点j

你需要选择一些点使得得到权值最大。 
(建模是注意的是,每个点只能被选择一次,即使多个链下来,但是贡献不会重复累加)

 

叫做最大权闭合子图问题。

 

(感觉,“闭合”的意思是,所有点能走到的点都选择到了,不能走到其他集合里。就闭合了。)

大概选择的是一条链,,

也就是说,在满足合法的情况下,产生最优解。

 

使用最小割建模方式如下:

1.先把所有的正权点做和保存在ans

2.建立两个点S,T,对于所有正权点p,连接S到p一条流量为权值的边。

对于所有负权点q,连接一条q到T的流量为权值相反数(也就是绝对值)的边。

对于原图(i,j)的有向边,对应网络中的(i,j)流量为inf的边。

3.求原图的最小割c,ans=ans-c就是答案。

 

证明:

抓住要点:在合法性的前提下,最优化点的权值和。

所以分开证明。

1.合法性

ans之前是所有正权点的权值和,意味着,这些点我们先选择上。

但是,可能不合法,我们不得不舍弃一些正权点,或者选择一些负权点。

可以发现,在最小割中,

留下S到i的边,意味着选择这个正权点;切断i到T的边,意味着选择这个负权点。

只要证明,如果选择了一个点,我一定选择了这个点的所有后继。

如果选择了一个正权点,对应S到i的一条边

那么,为了使得S到T不连通,它“下游”的所有走向T的边都要被砍断。

而,对于它“下游”的所有S到i的边,它们的存在并不会影响S到T的联通性。所以由于是最小割,一定不会选择砍掉。

那么后继就都选择上了。

如果选择了一个负权点。

其上游必然有一个正权点。否则,根据最小割,我们不会选择它。

那么这个上游的正权点选择上了,根据上面的证明,那么这个负权点的下游也一定会被选上。

 

2.最优化

ans=正权点之和-牺牲的代价

正权点之和是一个定值。

最小割的大小就是牺牲的代价。

由于最小割最小,所以ans最大。

 

例题:

[NOI2006]最大获利

选择A,B可以有C的收益。

不好处理。

因为,多选择了一个信号站,可能造成很多收益,没办法统计。

反过来。

如果想要有C的收益,那么必须建立A,B信号站!

所以,把每个用户看做一个点,向A,B连边。信号站权值-P,用户权值+C

然后最大权闭合子图即可。

 

[六省联考2017]寿司餐厅

考虑品尝一个的di,j一定也会选择d>=i <=j的

所以就是最大权闭合子图了

减少边数,di,j->di,j-1,di+1,j

对于di,i,连到某个-ai的点,连到象征ai的-ai*ai*m的点

这样,最后选择的一定符合要求。收益di,j选择上了,花费也选择上了,并且满足“种”(即只算一次)和mx^2算且只算一次的要求。

 

转载于:https://www.cnblogs.com/Miracevin/p/10024863.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值