最大匹配 = 最小点覆盖 = 总点数-最大独立集 = 总点数-最小路径点(不重复)覆盖
注意总点数表示左右部的点数和。特殊的最小路径覆盖问题的点数也是问题中的总点数,不过只是二分图一侧的点数,因为有一半的点是根据含义构造出来的。
最小点覆盖:选择最少的点覆盖所有的边
证明:
1.最小点覆盖>=最大匹配数:如果要覆盖所有点,至少要把所有匹配边选上。
2.最小点覆盖<=最大匹配数:
1.求最大匹配
2.从左边每个非匹配出发,做一次增广标记所有经过的点。
得到:左边所有未被标记的点:一定是匹配点 ; 右部所有标记的点:一定是匹配点(如果是非匹配点说明还存在增广路),符合这种情况的左右部点之和为最大匹配。
对于一个匹配边:两端点一定同时被标记或同时没有被标记。(好像对证明没有意义)
对于任意一条边:如果同时被标记符合右部被标记,如果同时没有被标记符合左部没被标记。
最大独立集:选出最多的点,使得任意两点之间没有边。
证明:
等价于:去掉最少的点,将所有边破坏掉(剩下的点就是最大独立集)
等价于:求最小点覆盖
等价于:求最大匹配
最大团:选出最多的点,使得任意两点之间都有边。
证明:
对于图G,对于有边相连的点边删去,没有边的点加上边,求出它的补图G’,对于G’的最大独立集,就是G的最大团。
最小路径点覆盖:对于一个DAG图,用最少的互不相交(点和边都不重复)的路径将所有点覆盖。
证明:
将每个点拆成入度和出度点,形成二分图:出度点在左部,入度点在右部。由于每个点只属于一条路径,所有每个点的入度和出度都小于等于1,这就符合二分图的最大匹配了。由于每条路径都有一个终点出度为0,所有左部没有匹配上的点都代表每条路径的终点。由于每条边只能属于一条路径,所以路径之间是点不重复的。所以总的点数减去最大匹配点数等于最少的终点数目等于最少的路径数
最小路径重复点覆盖:
求传递闭包后,再求最小路径点覆盖