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