最大权闭合子图 最大密度子图学习笔记

最大权闭合子图

  • 参考胡伯涛论文《最小割模型在信息学竞赛中的应用》
1.定义

定义有向图G=(V,E)的一个闭合子图是该有向图的一个点集,其中这个点集中的所有点的出边连向的还是点集中的点
最大权闭合子图,就是在给每个点赋上权值之后,点集权值和最大的一个闭合子图
举个栗子:

图中有九个闭合图:,{3,4,5},{4,5},{5},{2,4,5},{2,5},{2,3,4,5},{1,2,4,5},{1,2,3,4,5}
其中最大权闭合图为{3,4,5},权值和为4

2.算法

构造:

加入源点S,汇点T,把图G=(V,E)构成一个网络:

  • 源点向所有正权点连边,容量为正权点权值

  • 所有负权点向汇点连边,容量为负权点权值的绝对值

  • 0权值点可以当作正权点或者负权点,无影响

  • 原图中的边保持不变,容量为INF

在构造得到的流网络中找到一个不包含容量为INF的边的割集(即只包含和源汇点相连的边的简单割),割集把原网络的点集分为两部分,一部分和S相连,一部分和T相连,这两部分除去ST分别构成了一个闭合子图
例如:

其中和S相连的部分代表的闭合子图{1,2,4,5},和T相连的部分代表

结论:

原图对应的最大权闭合图的权值和为所有正权点的权值和减去最小割

证明:

  1. 定义简单割为所有割边只和S,T关联的割集
  2. 在我们构造出来的图中,最小割必然是简单割

如果最小割不是简单割,那么割集中必然包含了INF的边,这和最小割定义冲突,所以最小割是简单割

  1. 闭合图和简单割一一对应
  • 简单割对应闭合图

一个简单割不存在INF边,所以分割得到的点集所连出的点也在相应点集内,简单割对应闭合图

  • 闭合图对应简单割

假设割集中存在INF的边,那么对于某个点u,它连出的点v必然不在相同点集内,就不能构成闭合图,所以闭合图对应简单割

割集把原网络分为两部分,令VS为和源点相连的点集,VS为与汇点相连的点集
VSVS+VTVT+分别表示对应点集中的点权为正或者负的点子集
可以得到一个割集的权值和为:vVT+wv+vVS(wv)
因为正权点都和源点S连边,负权点都和汇点T连边,所以在VS中的负权点都是和T割开的点,在VT中的正权点都是和S割开的点

  1. 最小割的割集形成的点集VSVT中,VS{S}就是最大权闭合子图中的点,且最大权值和为所有正权点的权值和减去最小割

可以发现,割集中和S相连的边都是不选的正权点,和T相连的都是不选的负权点
=(+)
=
=+
=
而原图中的正权点的权值和是定值,所以只要最小化割集的容量即可,所以答案就是最小割

最大密度子图

1.定义

定义一个无向图G=(V,E)的密度D为边数|E|和点数|V|的比值,即D=|E||V|
无向图G=(V,E)最大密度子图G=(V,E)为无向图G=(V,E)的一个子图且具有最大的D=|E||V|
举个栗子:

图中红色的点和边构成了最大密度子图,密度为54

2.算法

可以把问题转化为求D=f(x^)=eExevVxv
其中xe,xv{0,1},如果是1表示在子图中,0表示不在子图中并且如果边(u,v)子图中,边(u,v)的两个端点u,v也必然在子图中

我们假设最优的密度为g,那么构造一个函数h(g)=argmaxx^{eE1xevVgxv}
假设最优密度为D,可以得到:

{h(g)<0g>Dh(g)=0g=Dh(g)>0g<D

所以可以二分密度,问题转化为如何找到h(g)=argmaxx^{eE1xevVgxv}的最大值
可以发现对于每条边e(u,v)E,要加入子图中的前提是u,v都在图中,所以容易发现这可以用最大权闭合图来解决

  • 每条边作为一个点,向这条边的两个端点连INF的边
  • 源点向所有原图中的边连边,容量为1
  • 原图中的点向汇点连边,容量为g

二分的上下界分别为|E|0
例题:POJ3155 Hard Life

posted @   _kiko  阅读(963)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示