一、概念
闭合图:对于一个有向图 G G G,设 V V V是图中的某一点集,那么从该点集中的任何一点沿着它连出去的边走,走到的点还是属于点集 V V V,这些点集以及它们之间的边形成的图就是闭合图。
最大权闭合子图,顾名思义,就是所有闭合子图中点权之和最大的那个,注意这里的权指的是点权,不是边权,因为闭合图是对于点集而言的。
结论:最大权闭合子图 = = =所有正点权的和 − - −最小割。
二、证明
2.1流网络的构造
对于一个有向图 G G G,先将其构造成一个流网络 G ′ G^{'} G′:
从源点 s s s向图中所有的正点权连接一条容量是该点点权的边,从图中所有的负点权向汇点 t t t连接一条容量是该负点权绝对值的边。原图中的边都不变,容量是正无穷 ∞ \infty ∞。(如下图)
2.2首先证明原图G的任何一个闭合子图都与新图 G ′ G{'} G′的一个简单割一一对应。
首先在本问题中定义一个简单割的概念:
简单割是指一个割的割边不包含边权是 ∞ \infty ∞的边,也就是不包含上图中边集3里的边。简单割是所有割的一个子集。
可以得出,最小割一定是一个简单割,因为 最 小 割 = 最 大 流 最小割=最大流 最小割=最大流,而从源点 s s s流出的流量是有限的,那么最大流就是有限的,最小割也就是有限的,如果包含边权是 ∞ \infty ∞的很明显是不可能的(要不然最小割就是无限的)。
设 V V V是原图G的所有点的点集。
-
对于任何一个闭合子图,都可以构造出一个简单割:
假设原图的一个闭合子图的闭合点集是 V ′ V{'} V′,我们可以构造这样一个割[S, T],其中 S = V ′ + s , T = V − V ′ + t S=V^{'}+s,T=V-V^{'}+t S=V′+s,T=V−V′+t。
我们可以证明,该割一定是一个简单割。
因为 V ′ V^{'} V′是一个闭合点集,也就是说,沿着 V ′ V^{'} V′中的任何一条边走,最终还是只能到达 V ′ V^{'} V′,也就是说,从 V ′ V^{'} V′无法走到 T T T的集合。那么,割[S, T]中间的割边一定不包含容量是 ∞ \infty ∞的边(如果存在,一定是从 V ′ V^{'} V′连出去的,但是就和它是闭合点集矛盾了)。 -
任何一个简单割,同样也能构造出一个闭合子图:
设图 G ′ G^{'} G′的一个简单割是[S, T],令点集 V ′ = S − s V^{'}=S-s V′=S−s。
我们可以证明 V ′ V^{'} V′一定是一个闭合点集。
因为该割是一个简单割,那[S,T]之间就不存在容量是 ∞ \infty ∞的边。那么我们沿着集合 S S S中的容量是 ∞ \infty ∞的边走(因为只有这样的边才是原图G的边),一定走不到 T T T,还是只能走到 S S S,符合闭合点集的定义。
所以,原图G的任何一个闭合子图都与新图 G ′ G{'} G′的一个简单割一一对应,那么我们要求的闭合子图的最值,就对应着简单割的最值。
2.3闭合点集的点权与它对应的简单割的数量关系
设 V V V是原图G的所有点的点集, W i W_i Wi表示 i i i的点权。
有简单割[S, T],令 S = V 1 + s S=V_1+s S=V1+s, T = V 2 + t T=V_2+t T=V2+t,其中 V 1 + V 2 = V V_1+V_2=V V1+V2=V。
-
[S, T]的容量C[S, T]的表达式:
割边可以分为以下 4 4 4类:
① s → t s \to t s→t,该类边不存在,因为我们建图的时候并没有从 s s s向 t t t连边。
② s → V 2 s \to V_2 s→V2,建图时 s s s连向的点都是正点权。
③ V 1 → t V_1 \to t V1→t,建图时连向 t t t的点都是负点权。
④ V 1 → V 2 V_1 \to V_2 V1→V2,该类边不存在,因为该割是简单割,那么割边就不存在原图内部的边,因为这样的边的容量是 ∞ \infty ∞。
所以,实际上,简单割的割边只有②③两类边,简单割的容量就是这两类边的边权和。
设 V 1 − V_1^- V1−表示点集 V 1 V_1 V1中点权为负的点, V 2 + V_2^+ V2+同理。
那么C[S, T] = ∑ v ∈ V 2 + ( W v ) + ∑ v ∈ V 1 − ( − W v ) =\sum_{v \in V_2^+}(W_v)+\sum_{v \in V_1^-}(-W_v) =∑v∈V2+(Wv)+∑v∈V1−(−Wv)。 注 意 , 负 点 权 要 取 反 , 因 为 建 图 时 连 的 边 的 边 权 都 是 正 的 。 _{注意,负点权要取反,因为建图时连的边的边权都是正的。} 注意,负点权要取反,因为建图时连的边的边权都是正的。 -
闭合子图点权和 W ( V 1 ) W(V_1) W(V1)的表达式:
W ( V 1 ) = ∑ v ∈ V 1 + ( W v ) + ∑ v ∈ V 1 − ( W v ) W(V_1)=\sum_{v \in V_1^+}(W_v)+\sum_{v \in V_1^-}(W_v) W(V1)=∑v∈V1+(Wv)+∑v∈V1−(Wv)
= ∑ v ∈ V 1 + ( W v ) − ∑ v ∈ V 1 − ( − W v ) \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{v \in V_1^+}(W_v)-\sum_{v \in V_1^-}(-W_v) =∑v∈V1+(Wv)−∑v∈V1−(−Wv)
这样,就得到了两个表达式:
C[S, T]
=
∑
v
∈
V
2
+
(
W
v
)
+
∑
v
∈
V
1
−
(
−
W
v
)
=\sum_{v \in V_2^+}(W_v)+\sum_{v \in V_1^-}(-W_v)
=∑v∈V2+(Wv)+∑v∈V1−(−Wv)
W ( V 1 ) = ∑ v ∈ V 1 + ( W v ) − ∑ v ∈ V 1 − ( − W v ) W(V_1)=\sum_{v \in V_1^+}(W_v)-\sum_{v \in V_1^-}(-W_v) W(V1)=∑v∈V1+(Wv)−∑v∈V1−(−Wv)
两式结合有:
C[S, T]
+
W
(
V
1
)
=
∑
v
∈
V
1
+
(
W
v
)
+
∑
v
∈
V
2
+
(
W
v
)
+W(V_1)=\sum_{v \in V_1^+}(W_v)+\sum_{v \in V_2^+}(W_v)
+W(V1)=∑v∈V1+(Wv)+∑v∈V2+(Wv)。
其中
∑
v
∈
V
1
+
(
W
v
)
+
∑
v
∈
V
2
+
(
W
v
)
=
∑
v
∈
V
+
(
W
v
)
=
定
值
s
u
m
\sum_{v \in V_1^+}(W_v)+\sum_{v \in V_2^+}(W_v)=\sum_{v \in V^+}(W_v)=定值sum
∑v∈V1+(Wv)+∑v∈V2+(Wv)=∑v∈V+(Wv)=定值sum
s
u
m
就
是
原
图
所
有
正
点
权
的
和
_{sum就是原图所有正点权的和}
sum就是原图所有正点权的和
所以,C[S, T]
+
W
(
V
1
)
=
s
u
m
+W(V_1)=sum
+W(V1)=sum。
要想让
W
(
V
1
)
W(V_1)
W(V1)最大,就要让C[S, T]最小。
就是求一个最小的简单割,而原图的最小割一定是一个简单割,也就是求原图的最小 割。
证毕!