这是我同学写的,挺不错的 就转来,图画的难看了点,不过意思很到位!!
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/12891989
图分成点和边
所有点组合成一个集合:点集,一般用 V 表示
所有边组成一个集合:边集,一般用 E 表示
所以一个图可以表示为 G = <V, E>
G有几个点就是几阶图 n个点就是n阶图
二分图:可以把点分成 X点集 和 Y点集 对于所有边 (边2头的2个点) 一个在X集中,一个在Y集中
满足上述条件的叫做二分图 (如下图)
最大匹配数:选一些边 (每个点至多用一次) , 使得边数最多时,叫最大匹配。
完全图:任意2个点之间有且仅有 1 条边 ( n个点的完全图叫做 n阶完全图 )
补图: 对于母图G来说, 点集相同, 有 G没有的边,没有 G存在的边 ,这样的图叫G的补图 。 补图的点 = 完全图的边 - G的边
无向图的最大团:从母图中选出k个点,(边则是 两头都是属于这k个点 的边) 使得这k个点构成k阶完全图, 这样叫做团, k最大时叫做最大团
无向图的最大独立集:从母图中选出k个点,使得互不相邻 (这k个点 任意2个 都不在同一条边上),这些点叫独立点, k最大时点组成的集合叫最大独立集
最小顶点覆盖:用k个点覆盖所有的边 (所谓覆盖边,只要边2端任意1点属于这k个点就算覆盖) ,k最小时就是最小顶点覆盖
最小路径覆盖:找出最少的路径条数,使得图中的点 有且仅被覆盖1次, 注意:单独一个点也是一条路径 ( 有a,b,c 3点,有单向路径a->b, b->c ,此时选择a->c的路径使得3个点都被覆盖,所以这里最小路径覆盖数是1 )
二分匹配时,X集和Y集中每个点 仅能被连1次(允许不连)
基本公式:
最大团个数 = 补图最大独立集
最小(路径,顶点) 覆盖 + 最大独立集 = 顶点数
在二分图中 最大匹配数 = 最小(路径、顶点) 覆盖
转载自:http://www.cnblogs.com/ka200812/archive/2011/07/31/2122641.html
最小路径覆盖问题值得注意的地方
首先,最小路径覆盖=总节点数-最大匹配数。这个应该已经是路人皆知了。
所谓最小路径覆盖,是指在一个有向图中,找出最少的几条路径,用它们来覆盖全图
这里说的值得注意的地方,如果有向图的边有相交的情况,那么就不能简单的对原图求二分匹配了
举个例子,假设有图:1->2 2->5 2->3 4->2,事实上,这其实就是两条边:1->5 4->3 ,节点2只是他们的一个交点
若直接求,则此图最大匹配数为2
floyd求出传递闭包后 可以得到这样的图,此时最大匹配数为3 ( 1->2 , 2->4, 3->5 )
最小路径覆盖数 = 顶点数 - 最大匹配数
如果只是简单的在原图的基础上求二分匹配,那么得到的匹配答案是2,最小路径覆盖答案便是5-2=3。
可是随便一看都能看看出端倪,这个图中,只需要两个点便可以探索完整个地图,这里最小路径覆盖数明显是2。
问题究竟出在哪里呢?其实就和这个交点2有关。既然边有相交,那么他们的连通性也应该连通下去。
解决的办法是对原图进行一次闭包传递(也就是flody),于是便增加了四条边:1->3 1->5 4->3 4->5
这时再求最大匹配数,匹配答案便是3,最小路径覆盖值为2,这是正确答案!
具体问题可见 PKU 2594 Treasure Exploration