标签:
匈牙利算法
二分图的最小点覆盖=二分图的最大匹配
求最小点覆盖:从右边所有没有匹配过的点出发,按照增广路的“交替出现”的要求DFS。最终右边没有访问过的点和左边访问过的点组成最小点覆盖。
证明见这里
二分图的最少边覆盖=点数-二分图的最大匹配
证明:
先贪心选一组最大匹配的边放进集合,对于剩下的没有匹配的点,随便选一条与之关联的边放进集合,那么得到的集合就是最小边覆盖。
所以有:最小边覆盖=最大匹配+点数-2*最大匹配=点数-最大匹配
二分图的最大独立集=点数-二分图的最大匹配
证明:
我们可以这样想,先把所有的点放进集合,然后删去最少的点和与之相关联的边,使得全部边都被删完,这就是最小点覆盖。所以有:最大独立集=点数-最小点覆盖
我们把原图中的点$V$拆成两个点$Vx$和$Vy$,对于原图中的边$A->B$,我们在新图中连$Ax->By$。那么最少不相交路径覆盖=原图的点数-新图的最大匹配
证明:
一开始每个点都独立为一条路径,在二分图中连边就是将路径合并,每连一条边路径数就减一。因为路径不能相交,所以不能有公共点,这恰好就是匹配的定义。所以有:最少不相交路径覆盖=原图的点数-新图的最大匹配
友情题:
先用floyd求出原图的传递闭包, 如果a到b有路, 那么就加边a->b。 然后就转化成了最少不相交路径覆盖问题。
用偏序集,建议先看看这篇博客
有向无环图的最大独立集=有向无环图最少不相交路径覆盖
友情题:
KM算法。
标签:
原文地址:http://www.cnblogs.com/maijing/p/4844893.html