最小点覆盖
定义: 要求用最少的点(X集合或Y集合的都行) 让每条边都至少和其中一个点关联
最小点覆盖 = 最大匹配
简单证明: 如果不是最大匹配的话,一定还有一条边可以被选出并连接二分图两边的点,这条边就没有被覆盖
例:
Bessie想驾驶她的飞船穿过危险的小行星群,小行星群是一个N×N的网格(1 <= N <= 500),在网格内有K个小行星(1 <= K <= 10,000)。
幸运地是Bessie有一个很强大的武器,一次可以消除所有在一行或一列中的小行星,这种武器很贵,所以她希望尽量地少用。给出所有的小行星的位置,算出Bessie最少需要多少次射击就能消除所有的小行星。
分析: 武器作为点 , 行星为边, 跑最小点覆盖
最大独立集
定义: 最大独立集问题: 在N个点的图G中选出m个点,使这m个点两两 之间没有边.求m最大值
最大独立集 = n - 最小点覆盖 = n - 最大匹配
简单证明:
最大独立集与最小覆盖集是互补的,即把最小覆盖中“已选点”和“未选点”互换,就可 以得到最大独立集。我们可以看看下列条件
覆盖集:对于每条边,至少有一个点被选
独立集:对于每条边,至少有一个点不被选
这样,每个覆盖集和一个唯一的独立集互补,每个独立集也和唯一覆盖集互补,所以最大独立集与最小覆盖集互补
例:
分析: 直接跑最大独立集
最小边覆盖
定义: 覆盖所有顶点至少要几条边
最小边覆盖 = n - 最大匹配
简单证明: 设最大匹配为m , 那么没有匹配的点就睡n-2*m , 至少要n-2*m条边 , 加上原来的m 就是n-m
例:(POJ3020)
一个矩形中,有N个城市,现在这n个城市都要覆盖无线, 若放置一个基站,那么它至多可以覆盖相邻的两个城市。
问至少放置多少个基站才能使得所有的城市都覆盖无线?
分析: 无向图转二分图 , x 向 y' , y向x' 连边 , 然后最小边覆盖
DAG 不相交路径覆盖
一个点拆成两个点
最小路径覆盖 = n - 最大匹配
简单证明: n个点最多n条边可以覆盖 , 我们合并二分图中的两个点相等于把两条边搞到一起 , 这样就少了一条边
例: POJ1422
DAG 相交路径覆盖
求传递闭包重新建边, 同上
例:POJ2594