1. 最大流问题定义

1.1 流网络(Flow network)

Def. A flow network is a tuple \(G = (V, E, s, t, c)\):

  • Digraph \((V, E)\) with source \(s ∈ V\) and sink \(t ∈ V\).
  • Capacity \(c(e) ≥ 0\) for each \(e ∈ E\).

定义. 一个流网络可以定义为一个元组\(G = (V, E, s, t, c)\), 满足如下条件:

  • 有向图\((V, E)\)中含义一个源点\(s ∈ V\)以及一个汇点\(t ∈ V\).
  • 每条边都有相应的容量\(c(e) ≥ 0\).

1.2 最大流问题(Maximum-flow problem)

Def. An flow \(f\) is a function that satisfies:

  • For each \(e ∈ E\) : \(0\le f(e)\le c(e)\) [capacity]
  • For each \(v ∈ V – \set{s, t}\) : \(\displaystyle \sum_\text{e in to v}f(e)=\sum_\text{e out of v}f(e)\) [flow conservation]

定义. 一个流\(f\)是指一个满足如下条件的函数:

  • 对于边\(e ∈ E\): \(0\le f(e)\le c(e)\). [容量]
  • 对于顶点\(v ∈ V – \set{s, t}\): \(\displaystyle \sum_\text{e in to v}f(e)=\sum_\text{e out of v}f(e)\). [流量守恒]

Def. The value of a flow \(f\) is: \(val(f)=\displaystyle \sum_\text{e out of s}f(e)-\sum_\text{e in to s}f(e)\).

定义. 一个流\(f\)的值可以定义为: \(val(f)=\displaystyle \sum_\text{e out of s}f(e)-\sum_\text{e in to s}f(e)\).

Max-flow problem. Find a flow of maximum value.

最大流问题. 找到一个流,它的值最大.

2. 最大流问题算法

三种解决最大流问题算法, B站upShusenWang的视频.

2.1 福特-富尔克森算法(Ford–Fulkerson algorithm)

13-2: Ford-Fulkerson Algorithm 寻找网络最大流

2.2 埃德蒙兹-卡普算法(Edmonds-Karp Algorithm)

13-3: Edmonds-Karp Algorithm 寻找网络最大流

2.3 迪尼茨算法(Dinic's algorithm)

13-4: Dinic's Algorithm 寻找网络最大流

3. 扩展

3.1 瓶颈边(Bottleneck edge)

定义. 流网络中的一条边被称为瓶颈边是指其容量的增加将导致最大流的增加。

问题. 给出一个识别流网络中瓶颈边的高效算法

算法如下:

  • 用Ford-Fulkerson算法, 得到最终的剩余图
  • 计算两个集合: 剩余图中所有从源点\(s\)可达的节点定义为集合\(A\), 剩余图中所有可以到达汇点\(t\)的节点定义为集合\(B\).
  • 任何一个连接集合\(A\)中节点到集合\(B\)中节点的边\(e\), 都是瓶颈边.

*第二步中, 求集合\(A\)可以通过在剩余图中从源点\(s\)深搜求得, 集合\(B\)可以通过在剩余图的反向图中从汇点\(t\)深搜求得. 此步骤时间复杂度为\(O(m)\), 其中m为剩余图中边的数量.

正确性: 增加\(e\)的容量, 一定会使剩余图产生一条新的增广路径, 从而使最大流增大.

最大流基础(Maximum Flow Basis)的更多相关文章

  1. 前端必须了解的布局常识:普通流(normal flow)

    目录 一.概述 二.块级元素和内联元素 常见的块级元素 BFC 常见的行内元素 IFC 三.哪些情况会脱离普通流 浮动 绝对定位 固定定位 display:none 四.总结 五.参考资料 一.概述 ...

  2. [Algorithm] Maximum Flow

    Ref MIT: lecture-13-incremental-improvement-max-flow-min-cut/ Ford Fulkerson algorithm for finding m ...

  3. Java 中级IO流基础及主要API编程

    1. IO流基础知识,流 是字节从源到目的地的运行的轨迹,次序是有意义的, 字节会按照次序进行传递, 比如Hello World 在下图中的传递的轨迹.该图形象的解释了IO中流的概念.流中全是字节.2 ...

  4. Java IO 文件与流基础

    Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...

  5. [转载]Maximum Flow: Augmenting Path Algorithms Comparison

    https://www.topcoder.com/community/data-science/data-science-tutorials/maximum-flow-augmenting-path- ...

  6. Spring Cloud Alibaba | Sentinel: 服务限流基础篇

    目录 Spring Cloud Alibaba | Sentinel: 服务限流基础篇 1. 简介 2. 定义资源 2.1 主流框架的默认适配 2.2 抛出异常的方式定义资源 2.3 返回布尔值方式定 ...

  7. Java 8 新特性之 Stream 流基础体验

    Java 8 新特性之 Stream 流基础体验 package com.company; import java.util.ArrayList; import java.util.List; imp ...

  8. 网络流--最大流--HDU 3549 Flow Problem

    题目链接 Problem Description Network flow is a well-known difficult problem for ACMers. Given a graph, y ...

  9. SPOJ 4110 Fast Maximum Flow (最大流模板)

    题目大意: 无向图,求最大流. 算法讨论: Dinic可过.终于我的常数还是太大.以后要注意下了. #include <cstdio> #include <cstring> # ...

  10. BZOJ-1433 假期的宿舍 最大流+基础建图

    网络流练习ing.. 1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1748 Solved: 765 [S ...

随机推荐

  1. 生产者消费者demo

    using System; using System.Collections.Generic; using System.Threading; namespace 生产者消费者 { class Pro ...

  2. linux虚拟机,ifconfig无法获取静态ip地址

    之前一直显示这种ip地址,如下图(网图),查看了DHCP,是正常启动的,虚拟网络编辑器中设置的也正确.后来发现更改虚拟机的设置后就可以了,如下: 设置方法:VMware-虚拟机-设置-网络适配器,选择 ...

  3. js 获取年月日时分秒,星期

    getDate() { var date = new Date() // 获取时间 var year = date.getFullYear() // 获取年 var month = date.getM ...

  4. 建议收藏| 学python的看过来,Python 史上最全第三方库收集

    发现一个宝藏网站: GitHub 上有一个 Awesome - XXX 系列的资源整理,这个系列以"全"闻名,但凡是有一定知识度的领域.语言.框架等,都有自己的 awesome-x ...

  5. 微软开源 Python 自动化神器 Playwright

    背景 逛博客时候突然看到 Playwright web自动化,感觉很有意思,就翻看了很多博客,简单记录一下. 简介 Playwright是一个强大的Python库,仅用一个API即可自动执行Chrom ...

  6. Charles 抓取 HTTPS 协议内容,需要做什么操作?

    抓取 HTTPS 需要安装证书,Charles 端需要安装 Android.iOS手机端也需要安装 电脑的 Charles 操作:1.proxy - proxy setting - http prox ...

  7. 如何简单使用Git

    Git基本功能 Git基本功能 在具体介绍Git能做什么之前,先来了解下Git里的四个角色: workspace: 本地的工作空间. index:缓存区域,临时保存本地改动. local reposi ...

  8. tail 命令 没有内容输出,记录一种解决

    1. 没有内容输出的命令: tail - f /test/platform/jtimer.log 控制台: 2. 当切换到此文件的当前路径后才有: 使用: tail - f jtimer.log

  9. JavaScript基础学习之二

    目录 JavaScript HTML DOM事件 事件触发1 事件触发2 addEventListener() 事件冒泡或事件捕获? 事件委托 removeEventListener() 方法 事件对 ...

  10. ctype.h系列的字符函数

    C有一系列专门处理字符的函数,ctype.h头文件包含了这些函数的原型.这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值(真):否则返回0(假).这个头文件在判断特定字符类型 ...