• 二分图的一些定理


    最小点覆盖:用最少的点(X集合或Y集合都的都行)让每条边都至少和其中一个点关联。

    可以证明:最少的点(即覆盖数)= 最大区配数M

    简单证明:

    (1)M个是足够的。只需要让它们覆盖最大匹配的M条边,则其它边一定被覆盖(如果有边e不被覆盖,把e加入后得到一个更大的匹配)

        M条边只需覆盖每条边两点中的某点(不是随便选一点)即可。

        所以不存在覆盖完某条边中的一点(任意一点)后与另一点相连的某条边两个端点都没被覆盖。

        如果是这样,则存在增广路,与事实矛盾。(画个图)

    (2)M个是必需的,仅考虑形成最大匹配的这M条边,由于它们两两之间没有公共点,因此至少需要M个点才可以把它们覆盖。

    DAG图的最小路径覆盖:用尽量少的不相交的简单路径覆盖有向无环图所有顶点。

    二分图模型:把所有顶点 i 拆成两个:X集合中的 i 和Y集合中的 i'。若有边 i->j,则在二分图中引入边 i->j'。

    结论:DAG图的最小路径覆盖数 = 节点数 - 二分图的最大匹配

    证明:

    若原图对应的二分图的最大匹配数为0,即X集合和Y集合之间不存在匹配边,则公式显然成立。

    若此时在对应二分图中添加一条匹配边(vi,vj),那么在原图的覆盖路径中存在一条vi到vj的有向边。也就是说vi和vj在一条路径上,于是路径覆盖数可以减少一个。

    若此时继续增加对应二分图的匹配边,每增加一条,路径覆盖数减少一个;直到匹配边不能继续增加时,路径覆盖数也不能再减少了。由此可知,对应二分图中的每条匹配边都和原图路径覆盖中一条路径上的一条匹配边对应。

    自己理解的证明方法:

    假设H是原图的一个路径覆盖方案(未必最优),则若H中存在一条vi到vj的有向边,则路径覆盖数减少一个,对应在二分图中添加边(vi,vj')。

    可知方案H构造出的一定是个匹配二分图,且这个二分图的匹配值就是路径覆盖数减少的个数。反之一个匹配二分图也可以得到一个对应的路径覆盖方案。

    故二分图最大匹配值就是路径覆盖数减少的最大值。公式成立。

    二分图的最大独立集:在一个二分图中,选择最多的顶点(可以是左集合中的也可以是右集合中的),使得所选择的点集中任意两点之间没有连边。

    结论:二分图的最大独立集 = 节点数 - 二分图最大匹配数。

    可以这样理解,在总的点集中,去掉最少的点,使得剩下的点相互之间没有边。即用最少的点去覆盖所有的边。这样就转化成了最小点覆盖。

  • 相关阅读:
    参考资料
    利用docker compose启动gitlab及runner
    在gitlab上setup CI
    git ssh端口号变更之后所需要的修改
    使用Docker Image跑Gitlab
    用Docker Compose启动Nginx和Web等多个镜像
    .NET core mvc on Docker
    ubuntu 挂载windows共享目录的方法
    13-14 元旦随想
    Uva 10177 (2/3/4)-D Sqr/Rects/Cubes/Boxes?
  • 原文地址:https://www.cnblogs.com/fish7/p/4088282.html
Copyright © 2020-2023  润新知