• 网络流学习笔记


    最大流

    Dinic 和 Hlpp,这两个比较常用的,我一般选择后者,不过要输出方案的话最好是用 Dinic。

    放一个封装好的 HLPP,这个版本是不遵守流量守恒的,大概率会有流量没有退回源点。

    Oiwiki

    最大流最小割定理

    对于 的定义以及一些结论与证明,可以参考 Oiwiki

    我理解的证明分两部分,一部分证明 “最小割 (ge) 最大流”,另外一部分就是构造出一种情况使得 “最小割等于最大流”。

    前者的理解,可以偏抽象,将割边视作断掉的边,使得源到汇无流量,那么这个 (ge) 成立。

    后者的话,只要将汇单独划入另一个集合,就是一个 (=) 号成立的方案。

    只要定义理清证明就不难。

    最大流最小割定理的运用

    根据定理,我们可以随时将最大流问题和最小割问题相互转化,以下就是一道很不错的例题:

    CF1383F

    对于每条特殊边,我们考虑是否将其划入割边的集合,能够得到一个当前的最小割。将最大流问题转化为最小割之后,就可以将所有 (2^k) 种情况中 其它边 组成的最小割(最大流)先跑出来,然后将这些边的贡献加入,就可以求出每次的最小割。至于这个预处理部分,是可以在其它情况的残量网络的基础上跑若干次増广路得到。


    最小费用最大流

    和最大流的区别在于:每次寻找边权的最短路进行增广。

    那么由于边权的存在,跑分层图用 SPFA 就会【】。但是负边权的存在又会导致 Dji 无法正常工作。

    给边加权非常难受,还要记录经过的边数,具体实现……也非常不尽人意。

    考虑给点加权以后,终点为当前点的一条路径的权值会加上当前点的新增点权。

    具体的内容可以参考 this

    Code

    $$ exttt{Dirty Deeds Done Dirt Cheap}$$
  • 相关阅读:
    Mysql 存储引擎中InnoDB与Myisam的主要区别
    [转]memmove函数
    _Obj* __STL_VOLATILE* __my_free_list
    [转]STL的内存分配器
    [转载]C++ 堆与栈简单的介绍
    [转载]__type_traits
    [转载]C++中 引用&与取地址&的区别
    [转载]delete指针之后应该赋值NULL
    [转载]C++中声明与定义的区别
    学习笔记ubuntu/shell
  • 原文地址:https://www.cnblogs.com/zjjws/p/14443022.html
Copyright © 2020-2023  润新知