一、概念
最小权点覆盖:
选出图中的一些点构成一个点集,使得该点集内的点可以覆盖原图中所有边,覆盖是指对于任意一条边,其两端的端点至少有一个是被选中的。那么对于每个点我们给他一个权值,所有点覆盖集中,总权值和最小的一个就是所说的最小权点覆盖集。
最大权独立集:
独立集是和点覆盖集对偶的一个概念,独立集是指一个点集,点集中任意两点之间是不存在边的,也就是点和点之间相独立,并不相连。而在所有独立集中,总点权最大的一个就是最大权独立集。
这两种概念适用于任何图,但是本问题只考虑如何求解二分图上的最小权点覆盖与最大全独立集。
-
学过匈牙利算法应该知道:
最 大 匹 配 数 = 最 小 点 覆 盖 = n − 最 大 独 立 集 最大匹配数=最小点覆盖=n-最大独立集 最大匹配数=最小点覆盖=n−最大独立集
匈牙利解决的是所有点点权为 1 1 1是的情况。算是本问题的一个特殊情况。 -
在这个问题里也有类似的关系:
最 小 割 = 最 小 权 点 覆 盖 = 点 权 和 − 最 大 权 独 立 集 最小割=最小权点覆盖=点权和-最大权独立集 最小割=最小权点覆盖=点权和−最大权独立集
二、最小权点覆盖求法
2.1 建图方法
设二分图的两个点集分别是
V
1
,
V
2
V_1,V_2
V1,V2。
(1)从源点
s
s
s向点集
V
1
V_1
V1内的点连接容量是该点点权的边
(2)从点集
V
2
V_2
V2内的点向汇点
t
t
t连接容量是该点点权的边
(3)点集
V
1
,
V
2
V_1,V_2
V1,V2之间的边的容量都建成
+
∞
+\infty
+∞
2.2 证明简单割与点覆盖集的对应关系
定义一个简单割的概念:
割边不包含容量是
+
∞
+\infty
+∞的边的割就是一个简单割。
最小割一定是一个简单割。
-
简单割 [ S , T ] → [S,T] \to [S,T]→ 原图的点覆盖集
对于该简单割,我们把所有与简单割的割边有关联的点(如果割边在左边,则选割边的终点,在右边则选割边的起点)都选上构成一个点集,可以证明,该点集一定是一个点覆盖集。
可以利用反证法:
假设对于原图中的一条边,其两边的点都没有被选上,那么很容易发现此时源点 s s s与汇点 t t t就联通了,此时它就不是一个割,矛盾了。 -
原图的点覆盖集 → \to → 简单割 [ S , T ] [S,T] [S,T]
按上面的过程逆着来,肯定可以构成出来一个简单割 [ S , T ] [S,T] [S,T]。
同时也可以发现,简单割对应的容量就是其对应的点覆盖集的点权和。
所以,
最
小
割
=
最
小
权
点
覆
盖
最小割=最小权点覆盖
最小割=最小权点覆盖
三、最大权独立集求法
对于一个图,设点集 V 1 V_1 V1是它的一个点覆盖集,剩下的不属于 V 1 V_1 V1的点构成一个点集 V 2 V_2 V2,可以发现 V 2 V_2 V2一定是一个独立集。因为剩下的点之间一定是没有边的判;否则,如果某两个点之间有边,点集 V 1 V_1 V1就是不是一个点覆盖集了,因为这两个点之间的边就没有被覆盖。
所以,要求最大权点覆盖,可以先求出来最小权独立集,剩下的就是最大权点覆盖了。