最大权闭合子图(最小割)

最大权闭合子图是一个寻找有向图中具有最大权值的子图问题,要求每个点的后继都在子图内。此问题可以转化为最小割问题,并使用网络流来解决。通过建立源点s和汇点t,连接正权值节点和负权值节点,求得最小割,从而找到最大权闭合子图。在合法性和最优性的基础上,通过例题展示了如何将实际问题转化为图论模型并求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最大权闭合子图(最小割)

定义:

有一个有向图,每一个点都有一个权值(可以为正或负或0),选择一个权值和最大的子图,使得每个点的后继都在子图里面,这个子图就叫最大权闭合子图。

如图:

能选的子图有Ø,{4},{3,4},{2,4},{1,2,3,4},

它们的权值分别为0,-1,5,-6,4.

所以最大权闭合子图为{3,4},权值为5.

解法:

这个问题可以转化为最小割问题,用网络流解决。

从源点s向每个正权点连一条容量为权值的边,每个负权点向汇点t连一条容量为权值的绝对值的边,有向图原来的边容量全部为无限大。

求最小割,割掉后,与源点s连通的点构成最大权闭合子图,权值为(正权值之和-最小割)。

理解:

割掉一条边的含义,由于原图的边都是无穷大,那么割边一定是与源点s或汇点t相连的。

割掉s与i的边,表示不选择i点作为子图的点;

割掉i与t的边,表示选择i点为子图的点。

如果s与i有边,表示i存在子图中;

如果i与t有边,表示i不存在于子图中。

合法性:

只有s与t不连通时,才能得到闭合子图。

如果s与t连通,则存在点i,j,使得s到i有边,i到j连通,j到t有边,所以j一定是i的后继,但选择了i,没有选择j,不是闭合子图。

如果s与t不连通,选择了正权点i,一定选择了i后继中的所有负权点。设j是i的后继中的正权点,则割掉s到j的边是没有意义的,最小割不会割掉它,则j一点被选中,所以i的所有后继都被选中,符合闭合图的定义。

最优性:

最小割=(不选的正权之和+要选的负权绝对值之和)

最大权闭合子图=(正权之和-不选的正权之和-要选的负权绝对值之和)=正权值和-最小割

因为正权值和,是定值,而最小割保证值最小,所以最大权闭合子图一定最优。

例题:

hiho一下 第119周 #1398

一共列出了N项不同的活动(编号1..N),第i项活动能够产生a[i]的活跃值

一共有M名学生(编号1..M),邀请编号i的同学来参加班级建设活动需要消耗b[i]的活跃值

每项活动都需要某些学生在场才能进行,若其中有任一学生没被邀请,这项活动就没法进行

班级建设的活跃值是活动产生的总活跃值减去邀请学生所花费的活跃值。

需要选择进行哪些活动,来保证班级建设的活跃值尽可能大。

样例输入         样例输出

3 4                      6

6 3 5 4

5 2 1 2

10 2 3 4

8 3 2 3 4

 

题解:先把这次的问题转化为2分图。将N个活动看作A部,将M个学生看作B部。若第i个活动需要第j个学生,就连一条从A[i]到B[j]的有向边。然后把活跃值算作权值,A部的节点包含有正的权值,B部的节点是负的权值。再建立源点s和汇点t,将源点s与所有权值为正的点相连,容量为权值;将所有权值为负的点与汇点t相连,容量为权值的绝对值;权值为0的点不做处理;同时将原来的边容量设置为无穷大。最大权闭合子图的权值等于所有正权点之和减去最小割。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值