最小点集覆盖=最大匹配
最小点集覆盖:选出最少的点使得每条边都至少有一个端点被选。
-
先证最小点集覆盖 ≥\ge≥ 最大匹配
假设最大匹配为 xxx,即有 xxx 条边两两之间没有公用点。
光覆盖这些边就要用到 xxx 个点。
“不少于”已证。
-
再证最小点集覆盖 ≤\le≤ 最大匹配。
假设最小点集覆盖为 xxx。那么这些点都至少能分别找到一条边不共用顶点(不出现多对一的情况)。
因为如果一个点有两条边的对应端点都在最小点集覆盖里面,且对应的两个端点都只能找到这个点的边,不如将两个端点扔掉,将这个点加入。
只要每个端点都选择一个这样的边,就必然能转化为一个匹配数与点集覆盖的点数相等的匹配方案。
所以最大匹配至少为最小点集覆盖数。
“不大于”已证。
综上,我们可以说最小点集覆盖等于最大匹配。
最小不交路径覆盖=总点数-最大匹配数
最小不交路径覆盖:在有向无环图中,选出最少的路径数使得每个点都至少被遍历一次,且路径两两无交点。
对原图(共 nnn 个点)中的每个点 iii 建立左部点 i1i_1i1 和右部点 i2i_2i2 。
若 x→yx\rightarrow yx→y 有边,则在二分图上连一条 x1→y2x_1\rightarrow y_2x1→y2 的边。
原图最小不交路径覆盖条数 =n−=n-=n− 新二分图上的最大匹配数。
初始时将每个点都看成一条路径,原图如果两点间有边,那么就相当于可以用一条路径覆盖这两个点,路径数减一,对应二分图上两点间的一个匹配。
利用递归地思想,可以扩展出原图的一条路径拆成了若干个二分图上的匹配。
二分图上每个点只会匹配一次也就是只会对一条路径产生减一的效果,这正好对应了“不交”的要求。
最小可交路径覆盖
floyd\text{floyd}floyd 传递闭包后建新图,问题直接转化为在新图上的最小不交路径覆盖。
即,若 x→y→z⇒x→zx\rightarrow y\rightarrow z\Rightarrow x\rightarrow zx→y→z⇒x→z。
只要原图两个点之间有路径可以到达就在二分图上进行连边。
这样虽然跑出来 x−zx-zx−z 的一条匹配边,但其实在原图上是经过了 yyy 点的,由于“可交”仍然起到了将 xxx 和 zzz 路径合并减少一条的效果。
最大独立集=总点数-最小覆盖集
最大独立集:选出若干个点使得点两两之间没有边相连。
最小覆盖集:就是最小点集覆盖。
显然,最大独立集 +++ 最大匹配 === 总点数。
如果不是最大匹配,也就是说剩下的点集中存在两个点之间有边相连,不符合最大独立集定义,匹配就要 +1+1+1,去掉两个点中的任意一个。
因为最小覆盖集等于最大匹配。
结论得证。
最大点权独立集=总权值-最小点权覆盖集=总权值-最小割
最大流等于最小割。
证明类比上面。