二分图的覆盖
最小点覆盖,即用最少的点去覆盖所有的边。(只要一条边的一个节点被标记,那这一条边就被覆盖啦!)
解法:二分图最小点覆盖包含的点数等于二分图最大匹配的边数。
惊不惊喜意不意外!!!!
思考一下会不会存在一种情况,使得一条边的两个点都被选择?当然有可能!
主要还是难在构图的。
来看俩题意思一下。
poj1325:有两台computer及N个任务,每台computer有M种模式。对于每个任务给定a[i],b[i],表示如果在a上运行要求的模式,以及在b上运行要求的模式。现在问怎么使更改模式的次数最小。
我们考虑到,每个任务要么在a要么在b,必选其一。所以把机器A的M种模式作为M个左点,B的M种作为M个右点,求出最小覆盖就ok了。复杂度O(NM)。
poj2226:N*M的网格状地面上,有一些格子泥泞,其他干净。要用木板覆盖泥泞格子(不准覆盖干净格子)。木板可以是1*x的(x∈全体正整数)。最少需要多少块木板?
我们把连续的泥地看作一个块,即有行泥泞块与列泥泞块。我们把行泥泞块作为左节点,列泥泞块作为右节点,对于每块泥地,在它所属的行块与列块间连边。求出最小覆盖即可。
补一道二分图带权最大匹配题目。
poj3565:平面上有N个白点,N个黑点,对每个白点,找到一个黑点,把二者连起来。要求最后线段都不相交。保证有解,求一种方案。
所有都不相交 + 保证有解 = 总长度最小(这个真的神了)
于是我们做一个二分图最小权值匹配。即,把所有权值取相反数,用KM算法算最大。答案就是KM结果的相反数。