网络流中的最小割模型
最大全闭合子图
问题定义
最大权闭合子图(Maximum Weight Closure)问题:
给定有向图 \(G=(V, E)\),每个顶点 \(v\) 有权值 $w_v $,求一个顶点子集 $C \subseteq V $,满足:
- 闭合性:若 $ u \in C $ 且存在边 $ u \to v $,则 $ v \in C $。
- 最大权值:$ \sum_{v \in C} w_v $ 最大。
网络流建模
建立源汇点 \(s,t\),\(s\) 向正点权点 连边,容量为 \(w_u\)。负点权点向 \(t\) 连边,容量为 \(|w_u|\)。其余的点边集不变,容量 \(+\infty\)。
答案即为 \(\sum_{w_u > 0}w_u - c(S,T)_{min}\)。
证明步骤
引理 1: 最小割一定是简单割。
若存在一个最小割 \((S,T)\) 不是一个简单割,那么一定有一条割边的容量为 \(+\infty\),一定不优。
另证,从源点连出的边都有容量,最大流一定有限,故最小割有限,与非简单割的容量为 \(+\infty\) 矛盾!
引理 2: 简单割一定与一个闭合图对应。
证明:
一、每个简单割对应一个闭合图
构造方法:
给定简单割 \((S, T)\),定义闭合图 \(C = S \setminus \{s\}\)。
闭合性验证(反证法):
- 假设存在 \(u \in C\) 和边 \(u \to v \in E\),但 \(v \notin C\) 且 \(v \neq t\)。
- 由于 \(C = S \setminus \{s\}\),则 \(v \in T \setminus \{t\}\)。
- 所以 \(c(u,v)=+\infty\),不是一个简单割,矛盾!
- 因此假设不成立,\(C\) 是闭合的。
二、每个闭合图对应一个简单割
构造方法:
给定闭合图 \(C\),定义割 \((S, T)\),其中 \(S = C \cup \{s\}\),\(T = V \setminus S \cup \{t\}\)。
简单性验证(反证法):
- 假设不对应一个简单割,那么 \(c(u,v)=+ \infty\)。
- 所以 \(u,v\) 不在一个闭合图中。
- 与 \(C\) 是一个闭合图矛盾!
- 因此假设不成立,\(\{S,T\}\) 是一个简单割。
引理 3:\(C = S \setminus \{s\}\),\(C'=V \setminus C\),$$c({S,T}) = \sum_{u \in C' \wedge w_u > 0} w_u + \sum_{u \in C \wedge w_u<0} -w_u$$。
由简单割的定义,\(c(S,T) = c(\{s\},C') + c(\{t\},C)\),由于从 \(s\) 连出的边到正权点,负权点连出的边到 \(t\),故:
引理 4:
证明:
将该式子与引理 3 中的式子相加即可得到
最大密度子图
给定无向图 \(G=(V,E)\),求一个联通子图 \(G'=(V',E')\),使得 \(\frac{|V'|}{|E'|}\) 的值最大。
二分答案 \(g\),即求一个联通子图满足 \(|E'|-g|V'| \ge 0\)。
不放将每一条边看成点构造新图,边对应点的权值为 \(1\),点的权值为 \(-g\),且边对应点向两个点连边。
新图的最大权闭合子图即为 \(\max(|E'|-g|V'|)\)。
二分图最小权点覆盖
问题定义
二分图最小点覆盖:二分图中选最少的点,满足每一条边的两个顶点至少一个被选中。
二分图最小权点覆盖:二分图中选最少的点,满足每一条边的两个顶点至少一个被选中,且点权和最小。
网络流建模
源点向左部点连边,容量为 \(w_u\)。右部点向左部点连边,容量为 \(w_u\)。原图中边不变,容量为 \(+\infty\)。
最小割就是原图的最小权点覆盖。
证明:
引理 1:最小割一定是简单割。
证明方式同上。
引理 2:简单割与一个点覆盖对应。
一、一个点覆盖集与简单割对应。
证明:
假设 \(V_1,V_2\) 是点覆盖集的左右部点的选择,那么 \(V_1\) 与 \(s\) 相连的边设成割边,\(V_2\) 与 \(t\) 相连的点设成割边。然后从源点往下搜索,搜到的所有点放到 \(S\) 集合中,搜不到的所有点放到 \(T\) 集合中。
如此得到一个简单割。首先所有割边必然在左、右两侧,所以如果是割就一定是简单割,那么是不是一个合法的割呢,只需要看能都从源点走到汇点即可。
这里假设从源点能走到汇点,那么就必然经过了中间某一条边,说明这条边的两个点都没有在点覆盖集中,这就不是一个合法的点覆盖集,就矛盾了,由此反证得出从源点一定走不到汇点,所以构造出的是合法的简单割。
二、一个简单割与点覆盖集对应。
假设 \((S,T)\) 是简单割,那么可以构造一个点覆盖:如果割边与 \(s\) 相连,则将这个左部点选上;如果割边与 \(t\) 相连,则将这个右部点选上。
证明:假设这不是一个点覆盖集,那么存在一条边 \((u,v)\) 且 \((u,v)\) 不是割边,那么存在一条从 \(s\) 到 \(t\) 的路径,与割的定义矛盾!

浙公网安备 33010602011771号