zoukankan      html  css  js  c++  java
  • 求解二分图点权最大独立集和二分图最小点权覆盖集

    二分图点权最大独立集:带点权二分图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)这两种边的端点不在同一集合中的话,就是割边了。

  • 相关阅读:
    keepalive高可用集群(nginx)
    nginx负载均衡
    linux-------lnmp安装
    nginx编译安装
    Django+MySQL安装配置详解(Linux)[更新为1.8.2版]
    linux性能监控——CPU、Memory、IO、Network
    linux 时钟时间,用户CPU时间,系统CPU时间 .
    指针用作传出参数时,需要二级指针
    僵尸进程&孤儿进程
    XHProf是一个分层PHP性能分析工具。
  • 原文地址:https://www.cnblogs.com/Chenyao2333/p/3691884.html
Copyright © 2011-2022 走看看