zoukankan      html  css  js  c++  java
  • 【转】来自GDXB大大大大的小总结

    一  最短路

    模型一 增加限制

    例:给定一个图,求起点到终点的最短路,其中你可以使用最多k次机会使某条边的边权变为x。

    解法:把每个点拆成k个点,分别表示还能使用多少次机会,构造新图。

     

    模型二 一个点集(点非常多,不能两两建边)之间两两可到达,求最短路。

    解法:新开一个点,每个点都连一条无向边到新点。

    二  二分图最大匹配

    二分图最大匹配 = 最小点覆盖 = n-最大点独立集

    最小点覆盖:选取最少的点覆盖所有的边

    最大点独立集:一个点集,其中的点两两不可到达。

    大致证明:

    最大匹配=最小点覆盖:如果还能匹配,那就证明还有边没被覆盖。

    最小点覆盖=n-最大点独立集:如果独立集可以增大k,那就证明有k个点间两两没边,那最小点覆盖就可以删去这k个点。N个点,去掉最小点覆盖的,剩下的两两没边,就是最大点独立集。

    最小边覆盖=n-最大匹配:本来是n条边(每个点要被一条边覆盖),每匹配一对,就相当于减少了一条边。

    三、 无向图 最小边覆盖:选择最少的边,覆盖所有的点。

     拆点,构造二分图,因为额原图是无向边,所以要一次add两条边。然后无向图最小边覆盖=n-最大匹配/2(n是原图总点数,因为拆点,所以要除以二)

    四  最小路径覆盖(有向无环图

    (1)每个点有且只有被一条路径覆盖。

     

    解法:把n个点拆成2n个点,变成二分图建边,然后 最小路径覆盖 = n-二分图最大匹配

    原因:本来是n条路径(每个点作为一条路径),每匹配一对,就相当于减少了一条路径。因为是二分图匹配,所以每个点只会在一条路径上。

    (2)每个点可被多条路径覆盖。

    解法一:在原图中用一次floyd,则上图新建了边(1,5)(2,4)(2,5),再把它当成每个点只能陪一条路径覆盖来做。因为路径2->3->4与路径1->3->5相当于2->3->4与1->5,即一条覆盖了k个点的路径可以看作是覆盖了<=k个点的路径。

    解法二:

     

    用网络流(最大流)跑出最大匹配。在二分图的右边按照原图建边,边权全为正无穷,则原理跟上面一样,路径1-3-5相当于路径1-5,则跑出的最大匹配就是一个点可在多条边上的。

    http://www.cnblogs.com/KonjakJuruo/p/5471008.html

    2016-10-25 21:47:40

  • 相关阅读:
    外部主机连接mysql服务器延时严重问题
    linux服务器wget无法成功解析域名及程序获取外网数据不稳定问题
    ecstore后台规格超过一定数量保存丢失
    Stata 指标体系权重的计算
    Stata 无序多分类Logistic回归
    asp.net core 管道模型及中间件MiddleWare原理
    Stata—循环语句
    Stata—更名、排序及表达式
    Stata—文件格式转换
    Stata—基本统计量输出、模型估计和结果输出
  • 原文地址:https://www.cnblogs.com/Konjakmoyu/p/5998380.html
Copyright © 2011-2022 走看看