zoukankan      html  css  js  c++  java
  • 上下界网络流学习笔记

    无源汇上下界可行流

    一些点,一堆边,每条边要满足流量限制([l,r])

    先令每条边流量等于流量下限,得到初始流,初始流可能不满足流量守恒,再建出残量网络(上限-下限),求出可能不满足流量守恒的附加流,使附加流和初始流合并后满足流量守恒

    如何建残量网络

    定义(a[i])表示初始流中流入量-流出量

    (a[i]>0)表示流入量大于流出量,附加量需要流入量小于流出量

    (a[i]<0)表示流入量小于流出量,附加量需要流入量大于流出量

    (a[i]=0)表示流入量=流出量,附加中流入量等于流出量

    问题变为多余的流入量和流出量从哪来

    新建虚拟结点(ss)(tt)

    对于(a[i]>0),附加量流出量大于流入量,(i)(tt)连一条(a[i])的边

    (a[i]<0),附加量流入量大于流出量,(ss)(i)连一条(-a[i])的边

    若在残量网络上一个满流,这个流就是我们需要的附加流

    最后,每条边的可行流(=)流量下界(+)附加流中这条边的流量

    有源汇上下界可行流

    有原点(s)和汇点(t),还有一些边,每条边有一个限制([l,r])

    即使有了源和汇,也可以转换为无源汇,因为(s)的流出量(=t)的流入量,就从(t)(s)连一条下界为(0)上界为(+infty)的边,跑无源汇上下界可行流,最终的可行流就是(t)(s)的边上的流量

    有源汇上下界最大流

    有原点(s)和汇点(t),还有一些边,每条边有一个限制([l,r]),求出最大流

    先求出可行流,再从原图残量网络中求出最大流,最大流就是可行流(+)最大流

    有源汇上下界最小流

    有原点(s)和汇点(t),还有一些边,每条边有一个限制([l,r]),求出最小流

    先求出可行流

    因为dinic中,反向边流量增加(=)正向边流量减小,所以,从(t)(s)求一边最大流,可行流大小-(t)(s)的最大流就是最小流

    有源汇上下界最小费用流

    建边:
    对于边(u o v),费用为(w),流量为([l,r])
    建成三条:
    (s o v),费用为(w),流量为(l)
    (u o t),费用为(0),流量为(l)
    (u o v),费用为(w),流量为(r-l)
    跑最小费用最大流

  • 相关阅读:
    管理 node 版本,选择 nvm 还是 n?
    JDBC性能优化方案
    JDBC基础-setFetchSize方法
    JDBC的fetchsize和maxrows
    正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果
    10种简单的Java性能优化
    35+ 个 Java 代码性能优化总结
    一线架构师带你玩性能优化
    诊断Java代码中常见的数据库性能热点问题应该这么做!
    十个 JDBC 的最佳实践
  • 原文地址:https://www.cnblogs.com/heower/p/8470697.html
Copyright © 2011-2022 走看看