《最小割模型在信息学竞赛中的应用》学习笔记
基础
流网络的定义,容量限制,反对称性,流守恒性…
我们约定对于点集
X,Y
X
,
Y
,令
f(X,Y)=∑u∈X∑v∈Yf(u,v)
f
(
X
,
Y
)
=
∑
u
∈
X
∑
v
∈
Y
f
(
u
,
v
)
增广路,最大流,最小割…
需要注意的是通过割的净流是把反向边算在内的,而割的容量是不算的。
最小割的边都是满流边。满流边不一定都是最小割中的边。
最大流最小割定理:
f f 是 的最大流 ⇔ ⇔ 残量网络不含增广路 ⇔ ⇔ 对 G G 的割 有 |f|=c[S,T] | f | = c [ S , T ]
分数规划
形式化的定义:
其中的 x x 是向量, 是解空间。
设
λ
λ
为当前猜测最优值,构造函数
Dinkelbach D i n k e l b a c h 定理: 设 λ∗=f(x∗) λ ∗ = f ( x ∗ ) 为最优解,有
大概就是,若 a(x)−λb(x)<0 a ( x ) − λ b ( x ) < 0 ,则 a(x)b(x)<λ a ( x ) b ( x ) < λ … 通过 g(λ) g ( λ ) 符号验证,二分求答案。
0-1 分数规划是一个特例,比较常见。
就是解向量满足只有
01
01
,可以表示为:
最大权闭合图
定义一个有向图的闭合图是该有向图的一个点集,且该点集的所
有出边都还指向该点集。闭合图不一定是一个连通块。
给每个点分配一个权值,权值和最大的闭合图被称为最大权闭合图。
它体现的是一种从属,前提,顺序关系。
最大权闭合图的求法是转化成最小割模型:
原图每条有向边 (u,v) ( u , v ) 替换为 c(u,v)=+∞ c ( u , v ) = + ∞ 。 对于所有 wx>0 w x > 0 加边 c(S,x)=wx c ( S , x ) = w x 。 对于所有 wx<0 w x < 0 加边 c(x,T)=−wx c ( x , T ) = − w x 。
正确性:
为方便叙述,设
V
V
表示原图点集,设 表示选的闭合图,
V2=V−V1
V
2
=
V
−
V
1
,
V+
V
+
表示
V
V
点集中权为正的点集, 是负的。
要最大化 w(V1) w ( V 1 ) ,即要最小化 c[S,T] c [ S , T ] ,所以就能转化为最小割了。
最大密度子图
无向图的子图的密度: D=|E||V| D = | E | | V |
看成是分数规划问题,二分答案
λ
λ
,需要求
先看二分的范围:显然有 m<ans<1n m < a n s < 1 n ,而且对于两个子图,其密度差不小于 1n2 1 n 2 。所以二分的次数是 O(logn) O ( log n ) 级别的,有点常数。
求 g(λ) g ( λ ) 一般有两种做法:
直接转化为最大闭合权图,一个点贡献 −λ − λ ,一条边贡献 1 1 ,取一条边的条件是其两个端点都取了。所以对原图每个点每条边建点,连一连就好了。这样图的规模是 。
上面的做法比较直接,一般比较好的是这个方法,
相当与选一个点集 ,其中每个点贡献 2λ−dv 2 λ − d v ,剩余点贡献 0 0 , 再加上一个割。
然后就可以转化为最小割问题啦。建图:
对于原图每条无向边 ,连 c(u,v)=1,c(v,u)=1 c ( u , v ) = 1 , c ( v , u ) = 1
对于每个点 v v ,连 ,这里加上一个较大数 U U 是为了保证权非负,一般取 。
这样图的规模就变小很多: (n,n+m) ( n , n + m )
最大密度子图带边权的推广
只需把 dv d v 换定义为关联边的权值和,把最小割建图中边的容量由 1 1 换成 ,并调整 U U , 可以取 。
注意二分次数 O(logn) O ( log n ) 就不成立了,而和边权大小有关,不过影响不大。
最大密度子图点与边均带权的推广
也是类似的:
用上面的方法建图即可。
二分图最小点权覆盖集与最大点独立集
点覆盖集:是无向图 的一个点集,使得该图中所有边都至少有一个端点在该集合内。
’ VV ∈ (,) u v E∀ ∈,满足对于 ,都有
或 成立,即 ,’uV ∈ ’ vV ∈ ’ uV ∈ ’ vV ∈ 至少一个成立。形象地说是若干个点“覆盖”住了 与它们邻接的边,这些边恰好组成了原边集。
点独立集:是无向图的一个点集,使得任两个在该集合中的点在原图中都不相邻。或者说是导出子图为零图的点集。
最小点覆盖集:是在无向图中,点数少的点覆盖集。
最大点独立集:是在无向图 中,点数多的点独立集。
最小点权覆盖集,最大点权独立集,就是加了点权的。
以上两个问题在一般无向图中都是经典的NPC问题。
二分图的最小点权覆盖集求法:
就是转化成最小割,对于左边的点连 c(s,v)=wv c ( s , v ) = w v 右边 c(v,t)=wv c ( v , t ) = w v 。对于原无向边 (u,v) ( u , v ) ,连 c(u,v)=+∞ c ( u , v ) = + ∞ 。
二分图的最小点权独立集求法:
可见点覆盖集与点独立集是互补的,若 V V 为点覆盖集,则 一定满足是点独立集,反之亦然。
所以最大化点覆盖集的权值和,就能最小化点独立集的权值和。