模型
最小割
定义
定义一个有向图 G = ( V , E ) G=(V,E) G=(V,E),的割为一种点的划分方式:将所有的点划分为 S S S 和 T = V \ S T=V\ \backslash\ S T=V \ S 两个集合,其中源点 s ∈ S s\in S s∈S,汇点 t ∈ T t\in T t∈T,割的容量为 c ( S , T ) = ∑ u ∈ S , v ∈ T c ( u , v ) c(S, T)=\sum\limits_{u\in S, v\in T}c(u,v) c(S,T)=u∈S,v∈T∑c(u,v),最小割即 c ( S , T ) min c(S,T)_{\min} c(S,T)min。
算法
我们只要跑一遍最大流,即为最小割。
证明
见「最大流最小割定理」证明。
最大权闭合子图
定义
定义一个有向图 G = ( V , E ) G=(V,E) G=(V,E) 的闭合子图 G ′ = ( V ′ , E ′ ) G'=(V', E') G′=(V′,E′),满足对于 ∀ ( u , v ) ∈ E ∀(u,v)\in E ∀(u,v)∈E,若 u ∈ V ′ u\in V' u∈V′,则 ( u , v ) ∈ E ′ , v ∈ V ′ (u,v)\in E',v\in V' (u,v)∈E′,v∈V′。
最大权闭合子图即为对每个节点赋权值 v a l val val,所得到的最大 ∑ p ∈ V ′ v a l p \sum\limits_{p\in V'}val_p p∈V′∑valp。
算法
我们构造超级源点 s s s 和汇点 t t t:
- 对于 v a l u > 0 val_u > 0 valu>0,在新图上连边 ( s , u , v a l u ) (s, u, val_u) (s,u,valu)。
- 对于 v a l u ≤ 0 val_u\le 0 valu≤0,在新图上连边 ( v , t , − v a l v ) (v, t, -val_v) (v,t,−valv)。
- 对于 ( u , v ) ∈ E (u,v)\in E (u,v)∈E,在新图上连边 ( u , v , + ∞ ) (u,v,+\infty) (u,v,+∞)。
所有正权值之和减最小割即是答案。
证明
感性证明一下,首先对于原图中的边 ( u , v , + ∞ ) (u,v,+\infty) (u,v,+∞) 不可能在最小割里面,然后我们令若 ( s , u , v a l u ) (s,u,val_u) (s,u,valu) 选到了最小割集,就代表不选 u u u;若 ( u , t , − v a l u ) (u, t,-val_u) (u,t,−valu) 选到了最小割集,就代表选 u u u。选出来的图必定是闭合子图,因为对于一个没选的正权点 u u u,因为原图除去割集不联通,所以 u u u 的所有负权后继与 t t t 之间的边必然在割集内,也就是已经选到了最终权值中。
那怎么保证最大呢?最小割保证损失节点权值(定义为负)和与负权权值之和最小,自然闭合子图总权值最大。
最大密度子图
定义
定义一个图 G = ( V , E ) G=(V,E) G=(V,E) 的密度为 ∣ E ∣ ∣ V ∣ \dfrac {|E|} {|V|} ∣V∣∣E∣,则对于一个图 G = ( V , E ) G=(V,E) G=(V,E),选出其一个子图 G ′ = ( V ′ , E ′ ) G'=(V', E') G′=(V′,E′),使得密度最大,该图就是最大密度子图。
算法 1
我们考虑 0/1 分数规划,二分答案为 g g g,判断 ∣ E ′ ∣ ∣ V ′ ∣ ≥ g \dfrac {|E'|} {|V'|}\ge g ∣V′∣∣E′∣≥g,即 ∣ E ′ ∣ − g ∣ V ′ ∣ ≥ 0 |E'|-g|V'|\ge 0 ∣E′∣−g∣V′∣≥0,于是我们只需要求 max { ∣ E ′ ∣ − g ∣ V ′ ∣ } \max\{|E'|-g|V'|\} max{∣E′∣−g∣V′∣} 即可。这里注意二分范围为 [ 1 n , m ] \left[\dfrac 1 n, m\right] [n1,m], ϵ = 1 n 2 \epsilon=\dfrac{1}{n^2} ϵ=n21,即最小子图密度之差为 1 n 2 \dfrac{1}{n^2} n21。
然后又有选了边 ( u , v ) (u,v) (u,v) 又一定要选点 u , v u,v u,v 的限制,考虑最大权闭合子图的做法,建立超级源点 s s s 和汇点 t t t:
- 对于表示边的点 u u u,在新图上连边 ( s , u , 1 ) (s, u, 1) (s,u,1)。
- 对于表示点的点 u u u,在新图上连边 ( u , t , g ) (u, t, g) (u,t,g)。
- 对于 ( u , v ) ∈ (u,v)\in (u,v)∈,在新图上连边 ( u , v , + ∞ ) (u,v,+\infty) (u,v,+∞)。
跑一遍最小割,令 m ≥ n m\ge n m≥n,二分次数为 log T ≈ log n m \log T\approx \log nm logT≈lognm,时间复杂度即为 O ( m 3 log T ) \mathcal O(m^3\log T) O(m3logT)。
证明 1
算法正确性显然,唯一需要注意点的是,最终答案不可能会出现只选表示点的点而不选与之相连的边,因为最优答案一定是原图的导出子图。
算法 2
证明 1 中说明了最终答案一定是一个导出子图,于是我们尝试在原图中找出最小割,割出一个导出子图。
首先按照算法一做一遍 0/1 分数规划,再将 max { ∣ E ′ ∣ − g ∣ V ′ ∣ } \max\{|E'|-g|V'|\} max{∣E′∣−g∣V′∣} 转化为 min { g ∣ V ′ ∣ − ∣ E ′ ∣ } \min\{g|V'|-|E'|\} min{g∣V′∣−∣E′∣},便于最小割,然后我们化一下式子:
g ∣ V ′ ∣ − ∣ E ′ ∣ = ∑ u ∈ V ′ g − ( ∑ u ∈ V ′ d e g u − c ( V ′ , V ′ ‾ ) 2 ) = 1 2 ( ∑ u ∈ V ′ ( 2 g − d e g u ) + c ( S , T ) ) \begin{aligned}g|V'|-|E'|=&\sum\limits_{u\in V'}g-\left(\dfrac{\sum\limits_{u\in V'}deg_u-c(V',\overline{V'})}{2}\right)\\=&\dfrac 1 2\left(\sum\limits_{u\in V'}(2g-deg_u)+c(S,T)\right)\end{aligned} g∣V′∣−∣E′∣==u∈V′∑g− 2u∈V′∑degu−c(V′,V′) 21(u∈V′∑(2g−degu)+c(S,T))
然后呢他有个神仙建图,从后往前推我不会,就先讲建图:
- 对于原图中的点 u ∈ V u\in V u∈V,在新图上连边 ( s , u , Δ ) , ( u , t , 2 g − d e g u + Δ ) (s,u,\Delta),(u,t,2g-deg_u+\Delta) (s,u,Δ),(u,t,2g−degu+Δ)。
- 对于 ( u , v ) ∈ E (u,v)\in E (u,v)∈E,在新图上建边 ( u , v , 1 ) (u,v,1) (u,v,1)。
最后求最小割,关系式为 ∣ E ′ ∣ − g ∣ V ′ ∣ = n Δ − c ( S , T ) 2 |E'|-g|V'|=\dfrac{n\Delta-c(S,T)}{2} ∣E′∣−g∣V′∣=2nΔ−c(S,T),我们发现 c ( S , T ) c(S,T) c(S,T) 和 ∣ E ′ ∣ − g ∣ V ′ ∣ |E'|-g|V'| ∣E′∣−g∣V′∣ 是线性关系的,这就说明了最小割正确性,这个关系式在下面给出证明。其中 Δ \Delta Δ 为偏移量,为了使边权非负,一般取 Δ = n \Delta = n Δ=n。
令 m ≥ n m\ge n m≥n,二分次数为 log T ≈ log n m \log T\approx \log nm logT≈lognm,时间复杂度即为 O ( n 2 m log T ) \mathcal O(n^2m\log T) O(n2mlogT)。
证明 2
我们尝试推出 c ( S , T ) c(S,T) c(S,T) 的本质,令 V ′ = S \ { s } , V ′ ‾ = T \ { t } V'=S\ \backslash\ \{s\}, \overline{V'}=T\ \backslash\ \{t\} V′=S \ {s},V′=T \ {t}。
c ( S , T ) = ∑ v ∈ V ′ ‾ Δ + ∑ u ∈ V ′ ( 2 g − d e g u + Δ ) + ∑ u ∈ V ′ ∑ v ∈ V ′ ‾ c ( u , v ) = ∑ v ∈ V ′ ‾ Δ + ∑ u ∈ V ′ ( 2 g + Δ − ( d e g u − ∑ v ∈ V ′ ‾ c ( u , v ) ) ) = ∑ v ∈ V ′ ‾ Δ + ∑ u ∈ V ′ ( 2 g + Δ − ∑ u ∈ V ′ c ( u , v ) ) = n Δ + 2 g ∣ V ′ ∣ − 2 ∣ E ′ ∣ \begin{aligned}c(S,T)&=\sum\limits_{v\in \overline{V'}}\Delta+\sum\limits_{u\in V'}(2g-deg_u+\Delta)+\sum\limits_{u\in V'}\sum\limits_{v\in \overline{V'}}c(u,v)\\ &=\sum\limits_{v\in \overline{V'}}\Delta+\sum\limits_{u\in V'}\left(2g+\Delta-\left(deg_u-\sum\limits_{v\in \overline{V'}}c(u,v)\right)\right)\\ &=\sum\limits_{v\in \overline{V'}}\Delta+\sum\limits_{u\in V'}\left(2g+\Delta-\sum\limits_{u\in V'}c(u,v)\right)\\ &=n\Delta+2g|V'|-2|E'|\end{aligned} c(S,T)=v∈V′∑Δ+u∈V′∑(2g−degu+Δ)+u∈V′∑v∈V′∑c(u,v)=v∈V′∑Δ+u∈V′∑ 2g+Δ− degu−v∈V′∑c(u,v) =v∈V′∑Δ+u∈V′∑(2g+Δ−u∈V′∑c(u,v))=nΔ+2g∣V′∣−2∣E′∣
然后移个项就得到了 ∣ E ′ ∣ − g ∣ V ′ ∣ = n Δ − c ( S , T ) 2 |E'|-g|V'|=\dfrac{n\Delta-c(S,T)}{2} ∣E′∣−g∣V′∣=2nΔ−c(S,T)。
DAG 最小不相交 / 可相交路径覆盖
定义
在一个有向无环图中选出若干条不相交的路径,使得每个点都属于一条路径,这种方案称为不相交路径覆盖,最小路径覆盖即为路径数最小的方案。
同理,在一个有向无环图中选出若干条路径,使得每个点都至少属于一条路径,这种方案称为可相交路径覆盖,最小可相交覆盖即为路径条数最小的方案。
算法
- 不相交路径
对于每个点 u ∈ V u\in V u∈V,拆成入点 u ′ u' u′ 和出点 u u u,对于原图中 ( u , v ) ∈ E (u,v)\in E (u,v)∈E,在新图中建边 ( u , v ′ , 1 ) (u,v',1) (u,v′,1),最终答案为总点数减去二分图 G = ( X , Y , E ) G=(X,Y,E) G=(X,Y,E) 的最大匹配,其中出点集合为 X X X,入点集合为 Y Y Y,时间复杂度 O ( m n ) \mathcal O(m\sqrt n) O(mn)。
- 可相交路径
我们发现链可以相交,尝试着转化为链不相交的做法。
我们对原图做一次传递闭包,这样路径就可以跳着走,也就是如果两条链相交,可以选择一条链跳过相交点,这样就转化为了不相交做法。然后其实最终的方案可以和可相交路径方案对应的。时间复杂度 O ( n 2 ( n ω + n ) ) \mathcal O(n^2(\dfrac n \omega+ \sqrt n)) O(n2(ωn+n))。
证明
- 不相交路径
对于没有边的原图,答案显然是 ∣ V ∣ |V| ∣V∣。而在新图中的每一条边 ( u , v ′ ) (u,v') (u,v′),都代表原图中的路径合并,且因为求的是最大匹配,所以路径一定合法。于是答案就为点数减合并最大次数。
- 可相交路径
显然。
定理
最大流最小割定理
最大流等于最小割。
证明方式
显然对于任意割一定大于等于任意流,特别的,有 ∣ f ∣ max ≤ c ( S , T ) min |f|_{\max}\le c(S, T)_{\min} ∣f∣max≤c(S,T)min。
然后对于任意割 c ( S , T ) = ∣ f ∣ c(S, T)=|f| c(S,T)=∣f∣ 的情况, f f f 此时一定是最大流,因为割的容量等于割的流量,相当于原图中已经没有增广路径,即最大流。又因 ∣ f ∣ max ≤ c ( S , T ) min ≤ c ( S , T ) = ∣ f ∣ max |f|_{\max}\le c(S, T)_{\min}\le c(S, T)=|f|_{\max} ∣f∣max≤c(S,T)min≤c(S,T)=∣f∣max,即可得 ∣ f ∣ max = c ( S , T ) min |f|_{\max}= c(S, T)_{\min} ∣f∣max=c(S,T)min。
Kőnig 定理
二分图最小点覆盖为最大匹配。
证明方式 1
我们考虑一个不存在增广路的最大匹配 M M M,并如下对点做标记:每次从一个未被匹配的左部点走交错路径,即从左往右走未匹配边,从右往左走匹配边,走过的所有点都打上标记。
其中对于所有未标记的左部点和标记的右部点为最小点覆盖集 C C C,我们将分两步证明。
点覆盖集合法
-
对于一条匹配边,一定是右端点先被标记,然后遍历左端点被标记,所以一条匹配边刚好有一个点属于点覆盖集。
-
对于一条未匹配边,必然至少有一个点属于点覆盖集,否则其左部点已被标记而右部点未被标记,显然这是不符合的。
点覆盖集最小
首先肯定有 ∣ C ∣ ≥ ∣ M ∣ |C|\ge |M| ∣C∣≥∣M∣,因为每个匹配边至少需要一个单独的覆盖点。
然后证明 ∣ C ∣ = ∣ M ∣ |C|=|M| ∣C∣=∣M∣:
-
对于右部被标记的点,必然被匹配,否则可以和左部过来的点匹配。
-
对于左部未被标记的点,必然被匹配,特殊情况为孤立点,此时交错路径退化为单点。
以上证明了如此构造点集一一对应匹配边,且为最小点覆盖集。
证明方式 2
考虑转化成最小割形式,令左部点集合为 X X X,右部点集合为 Y Y Y,则有 ( s , u , 1 ) , u ∈ L (s,u,1), u\in L (s,u,1),u∈L, ( u , t , 1 ) , u ∈ R (u,t,1),u\in R (u,t,1),u∈R, ( u , v , + ∞ ) , u ∈ L , v ∈ R (u,v,+\infty),u\in L, v\in R (u,v,+∞),u∈L,v∈R。若得到最小割 c ( S , T ) min c(S,T)_{\min} c(S,T)min,这个最小割的容量即为 ∣ X ∩ T ∣ + ∣ Y ∩ S ∣ |X\cap T|+|Y\cap S| ∣X∩T∣+∣Y∩S∣,因为不存在 ( u , v ) , u ∈ S , v ∈ T (u,v),u\in S, v\in T (u,v),u∈S,v∈T 被割。
于是我们构造点覆盖集合 P = ∣ X ∩ T ∣ ∪ ∣ Y ∩ S ∣ P=|X\cap T|\cup|Y\cap S| P=∣X∩T∣∪∣Y∩S∣,则所有 ( u , v ) , u ∈ S , v ∈ T (u,v),u\in S, v\in T (u,v),u∈S,v∈T 中 u , v u,v u,v 至少有一个在 P P P 中,否则不构成割集。所以最小割为最小点覆盖,又因最大匹配为最大流,最大流等于最小割,所以最小点覆盖为最大匹配。
霍尔定理
对于二分图 G = ( X , Y , E ) G=(X,Y,E) G=(X,Y,E), ∀ S ⊆ X , ∣ S ∣ ≤ N ( S ) ⇔ \forall S\subseteq X,|S|\le N(S) \Leftrightarrow ∀S⊆X,∣S∣≤N(S)⇔ 二分图具有完美匹配,当然, ∣ X ∣ = ∣ Y ∣ |X|=|Y| ∣X∣=∣Y∣。
首先如果有完美匹配,必然有 ∀ S ⊆ X , ∣ S ∣ ≤ N ( S ) \forall S\subseteq X,|S|\le N(S) ∀S⊆X,∣S∣≤N(S),剩下的有两种方式证明:
证明方式 1
首先原图没有完美匹配但是满足以上条件,我们在左部图 X X X 找到一个未被匹配的点,因为满足条件,所以右部与之相邻的点至少有一个且全部都一定被匹配,否则必定有更大的匹配。于是我们随便走到一个已经匹配的右部点,然后再走到相对应匹配的左部点,然后再随便找一个未走过的左部点,因为满足假设,我们最终一定停留在右部点。于是我们找到了一条增广路,不符合最大匹配。
证明方式 2
和 Kőnig 定理证明一样,如下连边:令左部点集合为 X X X,右部点集合为 Y Y Y,则有 ( s , u , 1 ) , u ∈ L (s,u,1), u\in L (s,u,1),u∈L, ( u , t , 1 ) , u ∈ R (u,t,1),u\in R (u,t,1),u∈R, ( u , v , + ∞ ) , u ∈ L , v ∈ R (u,v,+\infty),u\in L, v\in R (u,v,+∞),u∈L,v∈R,并得到最小割 c ( S , T ) min c(S,T)_{\min} c(S,T)min。
我们假设满足 ∀ S ⊆ X , ∣ S ∣ ≤ N ( S ) \forall S\subseteq X,|S|\le N(S) ∀S⊆X,∣S∣≤N(S) 而二分图不具有完美匹配,则最大匹配 ∣ M ∣ < ∣ X ∣ |M|<|X| ∣M∣<∣X∣,同时最小割 c ( S , T ) min < ∣ X ∣ c(S,T)_{\min} < |X| c(S,T)min<∣X∣。我们令 L 1 = S ∩ X L_1=S\cap X L1=S∩X, L 2 = X \ L 1 L_2=X\ \backslash\ L_1 L2=X \ L1, R 1 = N ( L 1 ) ∩ Y R_1=N(L_1)\cap Y R1=N(L1)∩Y,则由 L 2 ∩ R 1 L_2\cap R_1 L2∩R1 一定在割集内,又因假设满足,所以有 ∣ L 1 ∣ ≤ ∣ R 1 ∣ |L_1|\le |R_1| ∣L1∣≤∣R1∣。得到关系式 c ( S , T ) min ≥ ∣ L 2 ∩ R 1 ∣ ≥ ∣ L 2 ∩ L 1 ∣ = ∣ X ∣ c(S,T)_{\min}\ge |L_2\cap R_1|\ge|L_2\cap L_1|=|X| c(S,T)min≥∣L2∩R1∣≥∣L2∩L1∣=∣X∣,与假设矛盾,得证。
二分图 Vizing 定理
对于二分图 G = ( X , Y , E ) G=(X,Y,E) G=(X,Y,E),对每一条边染色,使得每个点所连的边颜色各不相同,若满足条件的最小颜色数为 χ ′ ( G ) \chi'(G) χ′(G),点的最大度数为 Δ ( G ) = max u ∈ V d e g u \Delta(G) = \max\limits_{u\in V}deg_u Δ(G)=u∈Vmaxdegu,则有 χ ′ ( G ) = Δ ( G ) \chi'(G)=\Delta (G) χ′(G)=Δ(G)。
证明
考虑构造性证明。令颜色集合为 { 1 , 2 , … , Δ ( G ) } \{1,2,\dots, \Delta(G)\} {1,2,…,Δ(G)},对于每个点 u u u 所连的边中,未被染的最小颜色编号为 C u C_u Cu。
我们依次加入每一条边 ( u , v ) (u,v) (u,v):
- 对于 C u = C v C_u=C_v Cu=Cv,将边 ( u , v ) (u,v) (u,v) 染成 C u C_u Cu 颜色。
- 对于 C u ≠ C v C_u\not=C_v Cu=Cv,令 C u < C v C_u< C_v Cu<Cv,则我们从 v v v 开始找到一条增广路,颜色为交替 C u , C v , C u , … C_u,C_v,C_u,\dots Cu,Cv,Cu,…,将整条路颜色翻转,并将 ( u , v ) (u,v) (u,v) 染成 C u C_u Cu 颜色。
得证。
Dilworth 定理
在有向无环图中,最长反链等于最小链覆盖;其对偶定理为最长链等于最小反链覆盖。
注意:链不一定要连续,即链不等于路径。
证明
对于原图,我们对其进行传递闭包,和求最小可相交路径覆盖一样,对于每个点 u ∈ V u\in V u∈V,拆成入点 u ′ u' u′ 和出点 u u u,对于原图中 ( u , v ) ∈ E (u,v)\in E (u,v)∈E,在新图中建边 ( u , v ′ , 1 ) (u,v',1) (u,v′,1),最小链覆盖即为总点数减最大匹配。
还有一个结论:原图最长反链为最大独立集,以下证明:
对于原图中的任意一个点 u u u,在新图中 u u u 和 u ′ u' u′ 中必然至少有一个点在最大独立集中,否则必然存在 ( a , u ′ ) (a,u') (a,u′) 和 ( u , b ) (u, b) (u,b) 两条边,使得 a , b a,b a,b 都在最大独立集内,但如此原图便存在 ( a , b ) (a,b) (a,b),故不成立,所以最大独立集满足对于每个点在新图中的入点和出点尽可能多。显然对于这些点可以形成一组反链,因为最大独立集保证没有前驱和后继与原点相连,且这组反链可以和原图对应。
然后因为由「其他定理 1」可得二分图最大匹配 = 最大独立集补集,所以最小链覆盖等于最长反链。
其他定理
- 二分图最小点覆盖 = 最大独立集补集
我们发现点覆盖 C C C 和独立集 I I I 的定义恰好相反,即 ∀ ( u , v ) ∈ E , u ∈ C ∨ v ∈ C \forall (u,v)\in E,u\in C\vee v\in C ∀(u,v)∈E,u∈C∨v∈C 和 ∄ ( u , v ) ∈ E , u ∈ I ∧ v ∈ I \not\exists (u,v)\in E,u\in I\wedge v\in I ∃(u,v)∈E,u∈I∧v∈I。所以最大独立集的补集,就保证了每条边都被覆盖,得证。
根据 Kőnig 定理,可得二分图最大匹配 = 最小点覆盖 = 最大独立集补集。
- 二分图最小边覆盖 = 点数减最大匹配
很显然,对于最小边覆盖,我们希望一条边覆盖两个点的边数越多越好,即匹配数最大,于是最后总点数减去覆盖两个点的边即为最小边覆盖。
- 最大团 = 补图最大独立集
最大独立集两两之间没有边,补图则两两之间有边,则为团。
原文链接:https://blog.csdn.net/zack_zhoukuan/article/details/132543845?spm=1001.2014.3001.5501