省队集训01 网络流

  • 最大流算法:Dinic或SAP系列,掌握一种
  • 费用流算法:SPFA、zkw费用流(有bug但高效)
  • 可行流定义:
    • 容量限制:所有边的流量不高于上界,不低于下界
    • 流量平衡:除源汇外,所有点入流量=出流量

有上下界的可行流求法

  • 如果有源汇$s$和$t$,建边$t\to s$,容量(上界)无穷大,无下界。如果没有源汇就跳过这个步骤。
  • 建立附加源$s’$和附加汇$t’$ 。
  • 对于一条边$i\to j$,上界为$u$,下界为$l$:
    • 将其修改为容量为$u-l$,无下界。
    • 建边$i\to t’$和$s’\to j$,容量为$l$,无下界。
  • 原图有可行流当且仅当附加源汇满流
  • 原图$i\to j$的流量为新图流量$+l$
  • 优化建图:对于每个点$i$,合并和抵消$s’\to i$和$i\to t’$的容量

上下界的进一步理解

  • 流量、下界、上界的相对关系:
    流量、上下界之间只有相对关系是有用的,这三个数到底是多少本身没有那么明显的作用。我们只需要关注流量离上界还有多少,离下界还有多少,就能知道这个流还能怎么增。边上存离满流还有多少。
  • 附加图相当于:
    • 将所有边流量强制设置为下界
    • 此时破坏流量平衡,但满足了容量限制
    • 再通过附加源汇“消化”掉不平衡的流量
  • 是否可以把初始流量强制设置为下界到上界的任意值?
    容量:不变
    流量:x
    下界:不变
    建边:x
  • 能否据此提出一个规避掉负环的费用流算法?
    如果一条边费用是负的,就把初始流设成上界。

定义讨论

  • 上下界
  • 有源汇 vs. 无源汇
  • 可行流 vs. 最大流 vs.最小流
    • 有源汇可行流:除了源汇都满足流量平衡,所有边都满足容量限制。
    • 无源汇可行流:所有点都满足流量平衡,所有边都满足容量限制。
    • 有源汇最大流:除了源汇都满足流量平衡,所有边都满足容量限制且从源点出去的流量最大。
    • 无源汇最大流:无源汇没有最大流。
    • 有源汇最小流:除了源汇都满足流量平衡,所有边都满足容量限制且从源点出去的流量最小(反过来求最大流)。
    • 无源汇最小流:所有点都满足流量平衡,所有边都满足容量限制。
  • 最小费用流 vs. 最大费用流。
    • 最小费用流:显然。
    • 最大费用流:费用取相反数成最小费用流。
  • 最小费用可行流 vs. 最小费用最大流 vs. 最小费用最小流
    • 最小费用可行流:费用最小的可行流。
    • 最小费用最大流:流量最大时费用最小。
    • 最小费用最小流:流量最小时费用最小。
  • 有负环的最短路 vs. 有负环的费用流

性质大集合

  • 无源汇指定边最大/小流↔有源汇最大/小流
  • 源到汇最小流↔汇到源最大流
  • 上下界可行流↔附加源汇满流
  • 上下界最小流↔上下界可行流+汇到源最大流
  • 上下界最大流↔上下界可行流+源到汇最大流
  • 最小费用可行流↔ SPFA增流直到源到汇总费用非负
  • 最小费用最大流↔ SPFA增流直到源到汇达到最大流

常用建图技巧

  • 拆点:限点容、改变费用、划分阶段
  • 限定边满流:流量必须为定值的边等于上下界相等
  • 重chóng边合并:两个点之间的多条边容量合并
  • 分拆重chóng边:不同次经过时产生的费用/收益不同
  • 单入边或出边省点:一个点只有一条入边时可能去掉该点
  • 满流与下界转化:一条边一定满流时可以对图进行转化