[图论]---[二分图]---DAG最小路径点覆盖

DAG最小路径点覆盖的定义

给定有向图 G = (V, E) 。设 P 是 G 的一个简单路(顶点不相交)的集合。如果 V 中每个定点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖。P中路径可以从 V 的任何一个定点开始,长度也是任意的,特别地,可以为 0 。G 的最小路径覆盖是 G 所含路径条数最少的路径覆盖。

求法

这里用到了一个结论。
设原图点集 V = {1, 2, 3, … n},构造新图 G1 = (V1,E1),如下:
V1 = {x1, x2, x3, … xn} ∪ {y1, y2, y3, … yn}
E1 = {(xi, yi) :(i,j) ∈ E }
显然 G1 是一个二分图。
结论就是最小路径点覆盖数等于:结点数 - G1的最大匹配数。
这里我说明一下这个结论的正确性。
初始时,将每个单个结点视为一个路径,初始路径数等于结点数。原图中的每条边,对应了 G1 中一条匹配边,因此当两个结点 (i,j) 成功匹配时,意味着原图中的点 i 和点 j 的路径合并为一条,每有一条匹配边,路径就减少一条。因此最小点覆盖等于 结点数-最大匹配数。

变种问题

上面的最小路径点覆盖问题要求每条路径的结点不相交。有一种类型的问题规定每条路的结点可以相交,求一个最小覆盖数。
算法:先用floyd求出原图的传递闭包,然后就转化成了最小不相交路径覆盖问题。

例题链接

洛谷P2764 最小路径覆盖问题. 最小路径覆盖模板
洛谷P2172 [国家集训队]部落战争. 需要建模
POJ 1422. 同上模板
POJ 2594. 结点可重复路径覆盖

你可能感兴趣的:(图论,图论)