《最小割模型在信息学竞赛中的应用》——学习笔记

《最小割模型在信息学竞赛中的应用》学习笔记

基础

流网络的定义,容量限制,反对称性,流守恒性…

我们约定对于点集 X,Y X , Y ,令 f(X,Y)=uXvYf(u,v) f ( X , Y ) = ∑ u ∈ X ∑ v ∈ Y f ( u , v )

X,f(X,X)=0X,Y,f(X,Y)=f(Y,X)X,Y,Z, XY=,f(XY,Z)=f(X,Z)+f(Y,Z) ∀ X , f ( X , X ) = 0 ∀ X , Y , f ( X , Y ) = − f ( Y , X ) ∀ X , Y , Z ,   X ∩ Y = ∅ , f ( X ∪ Y , Z ) = f ( X , Z ) + f ( Y , Z )

增广路,最大流,最小割…

需要注意的是通过割的净流是把反向边算在内的,而割的容量是不算的。

最小割的边都是满流边。满流边不一定都是最小割中的边。

最大流最小割定理:

f f G 的最大流 残量网络不含增广路 G G 的割 [S,T] |f|=c[S,T] | f | = c [ S , T ]

分数规划

形式化的定义:

Minimizeλ=f(x)=a(x)b(x)(xS)s.t. xS, b(x)>0 M i n i m i z e λ = f ( x ) = a ( x ) b ( x ) ( x ∈ S ) s . t .   ∀ x ∈ S ,   b ( x ) > 0

其中的 x x 是向量,S 是解空间。

λ λ 为当前猜测最优值,构造函数

g(λ)=minxS{a(x)λb(x)} g ( λ ) = min x ∈ S { a ( x ) − λ b ( x ) }

Dinkelbach D i n k e l b a c h 定理: 设 λ=f(x) λ ∗ = f ( x ∗ ) 为最优解,有
g(λ)<0λ>λg(λ)=0λ=λg(λ)>0λ<λ g ( λ ) < 0 ⇔ λ > λ ∗ g ( λ ) = 0 ⇔ λ = λ ∗ g ( λ ) > 0 ⇔ λ < λ ∗

大概就是,若 a(x)λb(x)<0 a ( x ) − λ b ( x ) < 0 ,则 a(x)b(x)<λ a ( x ) b ( x ) < λ … 通过 g(λ) g ( λ ) 符号验证,二分求答案。

0-1 分数规划是一个特例,比较常见。

就是解向量满足只有 01 01 ,可以表示为:

Minimizeλ=f(x)=iaixiibixis.t.ibixi>0 M i n i m i z e λ = f ( x ) = ∑ i a i x i ∑ i b i x i s . t . ∑ i b i x i > 0

最大权闭合图

定义一个有向图的闭合图是该有向图的一个点集,且该点集的所
有出边都还指向该点集。闭合图不一定是一个连通块。

给每个点分配一个权值,权值和最大的闭合图被称为最大权闭合图。

它体现的是一种从属,前提,顺序关系。

最大权闭合图的求法是转化成最小割模型:

原图每条有向边 (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 表示原图点集,设 V1 表示选的闭合图, V2=VV1 V 2 = V − V 1 , V+ V + 表示 V V 点集中权为正的点集,V 是负的。

c[S,T]=vV+2wv+vV1wvw(V1)=vV1wvw(V1)=vV+wvc[S,T] c [ S , T ] = ∑ v ∈ V 2 + w v + ∑ v ∈ V 1 − w v w ( V 1 ) = ∑ v ∈ V 1 w v w ( V 1 ) = ∑ v ∈ V + w v − c [ S , T ]

要最大化 w(V1) w ( V 1 ) ,即要最小化 c[S,T] c [ S , T ] ,所以就能转化为最小割了。

最大密度子图

无向图的子图的密度: D=|E||V| D = | E | | V |

看成是分数规划问题,二分答案 λ λ ,需要求

g(λ)=max{|E|λ|V|} g ( λ ) = max { | E | − λ | V | }

先看二分的范围:显然有 m<ans<1n m < a n s < 1 n ,而且对于两个子图,其密度差不小于 1n2 1 n 2 。所以二分的次数是 O(logn) O ( log ⁡ n ) 级别的,有点常数。

g(λ) g ( λ ) 一般有两种做法:

直接转化为最大闭合权图,一个点贡献 λ − λ ,一条边贡献 1 1 ,取一条边的条件是其两个端点都取了。所以对原图每个点每条边建点,连一连就好了。这样图的规模是 (n+m,n+m)

上面的做法比较直接,一般比较好的是这个方法,

max{|E|λ|V|}=min{λ|V||E|}=min{vVλ(vVdvc[V,V¯¯¯¯¯¯]2)}=12min{vV(2λdv)+c[V,V¯¯¯¯¯¯]} max { | E ′ | − λ | V ′ | } = − min { λ | V ′ | − | E ′ | } = − min { ∑ v ∈ V ′ λ − ( ∑ v ∈ V ′ d v − c [ V ′ , V ′ ¯ ] 2 ) } = − 1 2 min { ∑ v ∈ V ′ ( 2 λ − d v ) + c [ V ′ , V ′ ¯ ] }

相当与选一个点集 ,其中每个点贡献 2λdv 2 λ − d v ,剩余点贡献 0 0 , 再加上一个割。

然后就可以转化为最小割问题啦。建图:

对于原图每条无向边 u,v,连 c(u,v)=1,c(v,u)=1 c ( u , v ) = 1 , c ( v , u ) = 1

对于每个点 v v ,连 c(s,v)=U+0,c(v,t)=U+2λdv ,这里加上一个较大数 U U 是为了保证权非负,一般取 U=m

这样图的规模就变小很多: (n,n+m) ( n , n + m )

最大密度子图带边权的推广

D=eEwe|V| D = ∑ e ∈ E w e | V |

只需把 dv d v 换定义为关联边的权值和,把最小割建图中边的容量由 1 1 换成 we ,并调整 U U , 可以取 eEwe

注意二分次数 O(logn) O ( log ⁡ n ) 就不成立了,而和边权大小有关,不过影响不大。

最大密度子图点与边均带权的推广

D=vVpv+eEwe|V| D = ∑ v ∈ V p v + ∑ e ∈ E w e | V |

也是类似的:

max{vVpv+eEweλ|V|}=min{vV(λpv)(vVdvc[V,V¯¯¯¯¯¯]2)}=12min{vV(2λ2pvdv)+c[V,V¯¯¯¯¯¯]} max { ∑ v ∈ V p v + ∑ e ∈ E w e − λ | V ′ | } = − min { ∑ v ∈ V ′ ( λ − p v ) − ( ∑ v ∈ V ′ d v − c [ V ′ , V ′ ¯ ] 2 ) } = − 1 2 min { ∑ v ∈ V ′ ( 2 λ − 2 p v − d v ) + c [ V ′ , V ′ ¯ ] }

用上面的方法建图即可。

二分图最小点权覆盖集与最大点独立集

点覆盖集:是无向图 的一个点集,使得该图中所有边都至少有一个端点在该集合内。
’ 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 ) = + ∞

二分图的最小点权独立集求法:

!(uV and vV)uV¯¯¯¯¯¯ or vV¯¯¯¯¯¯ ! ( u ∈ V ′  and  v ∈ V ′ ) ⇔ u ∈ V ′ ¯  or  v ∈ V ′ ¯

可见点覆盖集与点独立集是互补的,若 V V 为点覆盖集,则 V 一定满足是点独立集,反之亦然。

所以最大化点覆盖集的权值和,就能最小化点独立集的权值和。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值