二分图点权最大独立集:带点权二分图G中的一个子集V,其中一条边的两个端点不能同时属于V,且V中点权和最大。
点覆盖集的补集就是独立集,因为点覆盖集中每个边都至少被一个点覆盖,补集就不可能存在一条边的两个端点。
那么显然:二分图点权最大独立集=二分图点权和-二分图最小点权覆盖集
关于如何求二分图最小点权覆盖集找了好多内容,找到了一个不错的,就转过来了:
以下内容转载自:http://blog.csdn.net/bysen32/article/details/7475685
点覆盖集:无向图G的一个点集,使得该图中所以边都至少有一个端点在该集合内。形式化的定时意思点覆盖集为V'∈V,满足对于所有的(u,v)∈E,都有u属于V'或v属于V'成立,即至少一个成立。形象的说是若干点“覆盖”住了与他们邻接的边。这些边恰好组成了原边集。
最小点覆盖集: 在无向图G中,点数最小的覆盖集。
最小点权覆盖集:在带点权无向图G中,点权之和最小的点覆盖集。
通常解法:
建立源点,向X部每个点连边;建立汇点,从Y部的每个点向t连边,二分图中的边看成有向的。则任意一条从s-t的路径,一定具有s-u-v-t的形式。割的性质是不存在一条从s到t的路径。故路径上的三条边中至少有一条在割中。人为的使得(u,v)不在割中,即建立容量为INF的边(u,v)。则(s,u),(v,t)至少有一条边在最小割中,正好与点覆盖集限制条件的形式相符合。目标为求最小化点权之和,恰好也是最小割的优化模型。
怎样求割边?
割边为分割S集合与T集合的边,所以我们只需要通过DFS把能与s点连接的边都找出来,作为S集合,剩下的作为T集合中的点,则(s,u)或(v,t)这两种边的端点不在同一集合中的话,就是割边了。