首页 > 其他分享 >网络流学习笔记

网络流学习笔记

时间:2025-01-23 20:55:57浏览次数:1  
标签:frac 容量 增广 sum 网络 笔记 学习 mathcal

发现其实整理不完所有内容,干脆把所有不会的记了算了 qwq。

基础定义

网络 \(G = (V, E)\) 是一张有向图,其中的边 \((x, y) \in E\) 都有一个权值 \(c(x, y)\),称为 容量。特别的,对于 \((x, y) \notin E\) 可以认定 \(c(x, y) = 0\)。

与一般有向图的区别在于,\(\exist s, t \in E\) 称为网络的 源/汇点,满足 \(s\) 只有出边、\(t\) 只有入边。可以认为 \(s\) 拥有有 无限的流。当然,一部分特殊的网络可能 有多个甚至没有 源汇点。

对于网络 \(G\), (流量)\(f\) 指一个 \(E\) 到整数(实数)集的函数,(人话就是边的 实际流量,)满足:

  • 容量限制:对于每条边,实际流量不超过其容量,\(0 \le f(x, y) \le c(x, y)\);
  • 流量守恒:除源汇点外,所有节点不额外储存流,流入总量等于流出总量,\(\forall x: \sum_{y \in V} f(y, x) = \sum_{y \in V} f(x, y)\);
  • 斜对称性:\(f(x, y) = -f(y, x)\),这个相当于定义了负流。

对于流 \(f\),记其流量为 \(\lvert f \rvert\)。

同时定义 可行流 为一条从源点到汇点的合法路径;残量 为每条边的 \(c(x, y) - f(x, y)\)。上述三种量构成的网络分别定义为 容量网络、流量网络、残量网络。特别的,残量网络上的可行流又叫作 增广路

以及,对于点集的一个划分 \(\{S, T\}\) 满足 \(s \in S, t \in T\),称之为 ,并定义其容量为 \(\left\| \{S, T\} \right\| = \sum_{x \in S, y \in T} c(x, y)\)。

最大流最小割定理

证明 FF 增广的正确性,等价于证明 最大流最小割定理,即一张网络的 最小割容量 等于其 最大流流量。下面从一个引理出发证明这个定理。

引理:对于网络 \(G\) 与任意流 \(f\)、割 \(\{S, T\}\),有 \(\lvert f \rvert \le \left\| \{S, T\} \right\|\)。其中,取等号当且仅当 \(\forall x \in S, y \in T: f(x, y) = c(x, y), f(y, x) = 0\)。

Proof:

定义点 \(x\) 的 净流量 为 \(f(x) = \sum_{y \in V} f(x, y) - f(y, x)\),容易有 \(x \neq s, t \Rightarrow f(x) = 0\)。则:

\[\begin{aligned} \lvert f \rvert &= f(s) \\ &= \sum_{x \in S} f(x) \\ &= \sum_{x \in S} (\sum_{y \in V} f(x, y) - f(y, x)) \\ &= \sum_{x \in S} (\sum_{y \in S} f(x, y) - f(y, x) + \sum_{y \in T} f(x, y) - f(y, x)) \\ &= \sum_{x \in S} (\sum_{y \in T} f(x, y) - f(y, x)) + \sum_{x \in S} \sum_{y \in S} f(x, y) - f(y, x) \\ &= \sum_{x \in S} (\sum_{y \in T} f(x, y) - f(y, x)) \\ &\le \sum_{x \in S} \sum_{y \in T} f(x, y) \\ &\le \sum_{x \in S} \sum_{y \in T} c(x, y) \\ &= \left\| \{S, T\} \right\| \end{aligned} \]

取等号的两个条件分别对应倒数第一、第二个小于等于号。(莫名感觉这些加入无用量恒等变形证明好抽象……)

考虑证明两种状态均可取到来证明原定理。考虑一张无法继续增广的剩余网络,记 \(s\) 可到达的集合为 \(S\),以及 \(T = V \setminus S\),显然 \(\{S, T\}\) 是一个 (因为 \(t \in T\))且 \(\left\| \{S, T\} \right\| = 0\)。于是 \(\forall x \in S, y \in T\):

  • 若 \((x, y) \in E\),则 \(c'(x, y) = 0 = c(x, y) - f(x, y)\),有 \(f(x, y) = c(x, y)\);
  • 反之若 \((y, x) \in E\),则 \(c'(x, y) = 0 = c(x, y) - f(x, y) = 0 - f(x, y) = f(y, x)\),有 \(f(y, x) = 0\)。

写一遍似乎没难么难理解证明过程了,最小割也就不用讲了。怎么感觉这部分和 OI Wiki 长得一样?

Dinic 的复杂度

当前弧优化 是 Dinic 的复杂度保证,而 多路增广 是 Dinic 的常数优化。

对于 一般网络,复杂度应为 \(\mathcal{O}(n \times n m)\),因为 层数单调 总计增广 \(\mathcal{O}(n)\) 次,然后每次 DFS 复杂度 \(\mathcal{O}(n)\) 并且 至少减掉一条边,有单次增广 \(\mathcal{O}(n m)\)。

同时也有关于 值域 的增广上界。设 \(S = \sum \min(inC_{i}, outC_{i})\),如果在第 \(\sqrt{S}\) 轮增广之前就已经结束的话,不用管;否则此时的 增广路长度 不小于 \(\sqrt{S}\),则会存在 某两层之间形成的割 大小不超过 \(\sqrt{S}\),也就是最大流不超过 \(\sqrt{S}\),最多再流 \(\sqrt{S}\) 次。

对于 单位容量网络,复杂度应为 \(\mathcal{O}(\min(m^{\frac{1}{2}}, n^{\frac{2}{3}}) \times m)\),单轮增广的 \(m\) 是由于每条边只被走一次,增广轮数的 \(n^{\frac{2}{3}}\) 则需要类比上面的值域分析:假设已经进行了 \(2 n^{\frac{2}{3}}\) 轮增广,则最坏情况下每层平均 \(\dfrac{1}{2} n^{\frac{1}{3}}\) 个节点,最多有 \(n^{\frac{2}{3}}\) 曾包含点数不小于 \(\dfrac{1}{2} n^{\frac{1}{3}}\) 个节点。于是至少有相邻的俩层点数都不超过 \(n^{\frac{1}{3}}\),最坏情况下形成一个大小为 \(n^{\frac{2}{3}}\) 的割,也就是最大流不超过 \(n^{\frac{2}{3}}\),总共进行 \(\mathcal{O}(n^{\frac{2}{3}})\) 次增广。

单位容量网络 不等价于 单位网络,单位网络在其基础上要求 \(in_{i} = 1 \lor out_{i} = 1\),二分图 就是一种经典的单位网络。结合第二、三条不难的出其复杂度为 \(\mathcal{O}(m \sqrt{n})\),或者 OI Wiki 上有个不太一样的证法。

最小割建模

问题是对于最小化的。

  1. 把一个物品当成一条 容量等于权值 的边,割这条边 代表选这个物品;
  2. 多个物品 不同时选,则把它们 串在同一条增广路上;同时建 容量为 \(\infty\) 的反向边

标签:frac,容量,增广,sum,网络,笔记,学习,mathcal
From: https://www.cnblogs.com/NianFeng/p/18688598

相关文章

  • Markdown学习day01
    Markdown语法学习标题:用#加Enter键:#+标题,有几个#就是几级标题#+空格+标题##+空格+标题###+空格+标题####+空格+标题#####+空格+标题字体粗体,两边加**;字体斜体,两边加*;字体斜体加粗,两边加***;字体删除线,两边加~~;字体引用使用>+空格引用分割线1.使用---2.使......
  • 【互联网行业】2024中国网络安全产业势能榜优能企业「互联网行业」典型案例展示
    互联网行业的快速发展使其成为了信息安全的重灾区。网站、应用、平台以及用户数据面临着越来越复杂的安全威胁。如何通过技术手段增强网络安全防护,保障用户信息的隐私安全,成为了互联网企业的重要任务。我们将展示互联网行业中一些典型的案例,分析其在网络安全方面的创新措施和应对......
  • 最大最全鸿蒙进阶班一站式包就业学习(1)
    鸿蒙开发模拟器的安装新版本编译工具和模拟器的下载地址链接:百度网盘-链接不存在提取码:fjjwwindows编辑器1安装编辑器2配置SDK1找到自己SDK的目录文件-设置-SDK1把老师的SDK文件拷贝到该目录下1最后点击确认3新建项目4手动更新项目插件......
  • Jetpack架构组件学习——使用Glance实现桌面小组件
    基本使用1.添加依赖添加Glance依赖://ForAppWidgetssupportimplementation"androidx.glance:glance-appwidget:1.1.0"//ForinteropAPIswithMaterial3implementation"androidx.glance:glance-material3:1.1.0"//ForinteropAPIs......
  • 1.23《构建之法》读书笔记一
    寒假初读《构建之法》,犹如打开了一扇通往软件开发新世界的大门,诸多观点让我深受启发。书中对软件工程师的角色定位有清晰阐述,强调不仅要掌握技术,更要具备解决实际问题的能力。这使我意识到,软件开发绝非简单的代码堆砌,而是要充分理解用户需求,用合适的技术方案去满足这些需求。例如......
  • 小柏实战学习Liunx(图文教程三十)
    本节课主题:linux安装宝塔面板7.9.4前言:一定要知道每一个命令是啥意思,并且要学会看报错信息,学会使用AI。 1.Centos安装命令(默认安装是7.8.0直接在线升级7.9.4):yuminstall-ywget&&wget-Oinstall.shhttp://io.bt.sy/install/install_6.0.sh&&shinstall.sh ......
  • 小柏实战学习Liunx(图文教程二十八)
    本节课主题:青龙Tools面板安装使用教程前言:一定要知道每一个命令是啥意思,并且要学会看报错信息,学会使用AI。1.两行代码,解决面板安装#创建QLTools目录并进入mkdirqltools&&cdqltools#Docker版本提供架构:amd64、arm64、arm-7dockerrun-itd--nameQLTools-v$P......
  • 小柏实战学习Liunx(图文教程二十九)
    本节课主题:linux安装 NolanPro前言:一定要知道每一个命令是啥意思,并且要学会看报错信息,学会使用AI。 0.进入nuolan群,找玛卡巴卡获取许可(@NolanNarkbot点击start后在群里使用命令菜单/narksq@NolanNarkbot获取许可)(在群里发送/narksq@NolanNarkbot获取到授权之后改名......
  • 【Aegisub】卡拉OK模板执行器学习
    目录什么是卡拉OK模板执行器卡拉OK模板执行流程概念解析template行code行code区模板修饰语声明类修饰语onceline[name]pre-line[name]sylfurisylfuri其他修饰语allcharfxnamefxgroupnamemultikeeptagsnoblanknotextrepeatn,loopn内联变量如何使用内联变量变量类型行(Line)变......
  • 小柏实战学习Liunx(图文教程二十八)
    本节课主题:青龙Tools面板安装使用教程前言:一定要知道每一个命令是啥意思,并且要学会看报错信息,学会使用AI。1.两行代码,解决面板安装#创建QLTools目录并进入mkdirqltools&&cdqltools#Docker版本提供架构:amd64、arm64、arm-7dockerrun-itd--nameQLTools-v$P......