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

本文介绍最小割模型在信息学竞赛中的应用,包括流网络的基本概念、最大流最小割定理、分数规划及其特殊形式0-1分数规划。此外,探讨了最大权闭合图、最大密度子图等高级应用,并讨论了二分图最小点权覆盖集和最大点权独立集的问题。

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

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

基础

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

我们约定对于点集X,YX,Y ,令 f(X,Y)=uXvYf(u,v)f(X,Y)=∑u∈X∑v∈Yf(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)

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

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

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

最大流最小割定理:

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

分数规划

形式化的定义:

Minimizeλ=f(x)=a(x)b(x)(xS)s.t. xS, b(x)>0Minimizeλ=f(x)=a(x)b(x)(x∈S)s.t. ∀x∈S, b(x)>0

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

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

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

DinkelbachDinkelbach 定理: 设 λ=f(x)λ∗=f(x∗) 为最优解,有
g(λ)<0λ>λg(λ)=0λ=λg(λ)>0λ<λg(λ)<0⇔λ>λ∗g(λ)=0⇔λ=λ∗g(λ)>0⇔λ<λ∗

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

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

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

Minimizeλ=f(x)=iaixiibixis.t.ibixi>0Minimizeλ=f(x)=∑iaixi∑ibixis.t.∑ibixi>0

最大权闭合图

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

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

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

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

原图每条有向边 (u,v)(u,v) 替换为 c(u,v)=+c(u,v)=+∞ 。 对于所有 wx>0wx>0 加边 c(S,x)=wxc(S,x)=wx。 对于所有 wx<0wx<0 加边 c(x,T)=wxc(x,T)=−wx

正确性:

为方便叙述,设 VV 表示原图点集,设 V1 表示选的闭合图,V2=VV1V2=V−V1 , V+V+ 表示 VV 点集中权为正的点集,V 是负的。

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

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

最大密度子图

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

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

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

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

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

直接转化为最大闭合权图,一个点贡献 λ−λ ,一条边贡献 11 ,取一条边的条件是其两个端点都取了。所以对原图每个点每条边建点,连一连就好了。这样图的规模是 (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′dv−c[V′,V′¯]2)}=−12min{∑v∈V′(2λ−dv)+c[V′,V′¯]}

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

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

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

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

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

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

D=eEwe|V|D=∑e∈Ewe|V|

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

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

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

D=vVpv+eEwe|V|D=∑v∈Vpv+∑e∈Ewe|V|

也是类似的:

max{vVpv+eEweλ|V|}=min{vV(λpv)(vVdvc[V,V¯¯¯¯¯¯]2)}=12min{vV(2λ2pvdv)+c[V,V¯¯¯¯¯¯]}max{∑v∈Vpv+∑e∈Ewe−λ|V′|}=−min{∑v∈V′(λ−pv)−(∑v∈V′dv−c[V′,V′¯]2)}=−12min{∑v∈V′(2λ−2pv−dv)+c[V′,V′¯]}

用上面的方法建图即可。

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

点覆盖集:是无向图 的一个点集,使得该图中所有边都至少有一个端点在该集合内。
’ VV ∈ (,) u v E∀ ∈,满足对于 ,都有
或 成立,即 ,’uV ∈ ’ vV ∈ ’ uV ∈ ’ vV ∈ 至少一个成立。形象地说是若干个点“覆盖”住了 与它们邻接的边,这些边恰好组成了原边集。

点独立集:是无向图的一个点集,使得任两个在该集合中的点在原图中都不相邻。或者说是导出子图为零图的点集。

最小点覆盖集:是在无向图中,点数少的点覆盖集。

最大点独立集:是在无向图 中,点数多的点独立集。

最小点权覆盖集,最大点权独立集,就是加了点权的。

以上两个问题在一般无向图中都是经典的NPC问题。

二分图的最小点权覆盖集求法:

就是转化成最小割,对于左边的点连 c(s,v)=wvc(s,v)=wv 右边 c(v,t)=wvc(v,t)=wv 。对于原无向边 (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′¯

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值