鉴于我一直没有分清楚最小边覆盖与最小路径覆盖的关系,于是我就写写总结。
边覆盖集:通俗地讲,所谓边覆盖集,就是G中所有的顶点都是E*中某条边的邻接顶点(边覆盖顶点),一条边只能覆盖2个顶点。
注意:在无向图中存在用尽量少的边去“覆盖”住所有的顶点,所以边覆盖集有极小与最小的区别。
极小边覆盖:若边覆盖E*中的任何真子集都不是边覆盖集,则称E*是极小边覆盖集。
最小边覆盖:边数最小的边覆盖称为最小边覆盖,通俗地讲,就是极小边覆盖中的最小的一个集合。
最小边覆盖在二分图中的应用:
最小边覆盖 = 最大独立集 = n - 最大匹配,这个是二分图上的一个性质。
最小路径覆盖与最小边覆盖的区别
最小路径覆盖和最小边覆盖不同,不要求给的图是二分图,而是要求是PXP的有向图,不能有环,然后根据原图构造二分图,构造方法是将点一分为二(拆点),v分为v*和v**然后如v*和u**有边,那么就在v*和u**之间连一条边。
然后最小路径覆盖是n-m,n为原图的点的个数,m为新造二分图的最大匹配。证明也特别简单,根据定义最小路径覆盖里要求同一个点只可以属于一条路径,即路径时不可以开叉的,如果在二分图里选两条有公共点的边那么反应在原图上就是路径有岔路,那么就不符合匹配的定义了,所以二分图里选的边必须是无公共交点的,这转化到最大匹配了。
POJ 1422 Air Raid
题目的大意是在一个有向无环图中,从一些顶点出发,能遍历图上所有的顶点,要求初始选择最小的顶点数且顶点不重复遍历。选择不相交的简单路径,这些路径覆盖图中所有的顶点。这就是典型的最小路径覆盖问题。
在有向无环图(RAG)中,有如下公式:
最小路径覆盖数 = 节点数 - 最大匹配数
下面给一个简单的证明:
若原图对应的二分图的最大匹配数为0,那么节点集v*,v**之间不存在匹配边,很明显,最小路径覆盖数 = 节点数。
若此时继续增加对应二分图的匹配边,每增加一条,路径覆盖数就减少一条;直到匹配边不能继续增加时,路径覆盖数也就不能减少了。由此可知,对应二分图中的每条匹配边都代表和原图路径覆盖中一条路径上的一条匹配边对应。
相反的,对于原图路径覆盖中的每条有向边(vi,vj),也可以再对应的二分图中做一条匹配边(v*,vj**),这样得到的就是一个匹配图。
若得不到匹配图,说明必定存在两个路径覆盖经过同一个点的情况,这时,我们可以通过Floyd求一次传递闭包,然后再去求最小路径覆盖。
具体的习题请见: POJ 1444、POJ 2594
具体为什么要使用Floyd算一次传递闭包呢?请进:
http://www.cnblogs.com/ka200812/archive/2011/07/31/2122641.html