ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

理性理解网络流の笔记

2022-07-05 18:02:08  阅读:190  来源: 互联网

标签:二分 cut 匹配 text 路径 最小 笔记 网络 理性


学习还是到本质比较好,把之前只是记住的一些结论用各种理论理性愉悦一下 :happy:。

理性愉悦

首先要引入一些基本性质,设 \(f(u,v)\) 表示 \(u\to v\) 的流量,则:

  • \(f(u,v)\leq c(u,v)\),这是废话,流量需要满足基本的流量上限。
  • \(f(u,v)=-f(v,u)\),称为反对称性
  • \(\displaystyle \sum_v f(u,v)=0\),称为流量守恒。当然源汇点不一定满足。

任意合法的流均满足上述性质,反之同理,如果满足上述性质就一定是合法的流

原图得到最大流 \(\Leftrightarrow\) 没有增广路

考虑反证法,设 \(f(u,v)\) 表示 \(u\to v\) 的流量,假设没有增广路但实际有更大流。

已知 \(\displaystyle \text{flow}=\sum_v f(s,v)\),如果有更大流则至少一个 \(f(s,v)\) 会变大。

则 \(f(v,s)\) 会相应变小,而为了满足流量守恒,会存在 \(u\) 使得 \(f(v,u)\) 变大,且 \(u\neq s\)。

如此传递下去,如果到了 \(t\) 就说明一定有增广路(这里实际上需要思考一下),否则无论成环还是路径“断头”,都仍不满足流量守恒。

最小割 = 最大流

首先 最大流 \(\geq\) 最小割,因为最大流必然把图分割了,否则说明仍有增广路。

其次 最大流 \(\leq\) 最小割,因为根据割的定义,所有的流都必然经过割边集中的某一条边,那么流量总和最大就是割边集总和。

二分图最小点覆盖 = 最大匹配数

从最小割角度证明。对二分图匹配建立网络流模型,发现中间一条 \(\inf\) 边的两端至少一个被割,也就是说迎合了“点覆盖”的条件。

同时根据最小割 = 最大流,也就是对应的 最小点覆盖 = 最大匹配了。

无论一般图还是二分图,都有 最大独立集 = \(n-\) 最小点覆盖,考虑补图即可,所以没什么好说的。

Hall 定理

对于二分图,左侧点集为 \(X\),右侧点集为 \(Y\),称匹配数为 \(\min(|X|,|Y|)\) 表示达到完美匹配。

不妨设 \(|X|\leq |Y|\),定义 \(N(S)\) 表示 \(X\) 的某个子集 \(S\) 连向 \(Y\) 的集合,称为 \(S\) 的“邻域”。

则二分图存在完美匹配 \(\Leftrightarrow\) \(\forall S\sub X,|N(S)|\geq |S|\)。

必要性显然,如果存在某个点集的所有出边都不及这个点集大小,那仅考虑这个点集本身都无法完美匹配。

充分性考虑反证,假设没有完美匹配但满足右侧。

首先肯定能找到左侧一个未匹配点 \(x\),根据右侧它一定有出边。如果出边到的点未匹配则矛盾,否则得到与它的匹配的点 \(y\)。

此时得到了一个大小为 \(2\) 的集合 \(S\),而此时只找到了 \(N(S)\) 中的一个点(\(y\) 的匹配点)。

根据上述规律,每次都能找到至少一条连向新增集合的新边。如果它连向非匹配点则说明找到了增广路,否则一定会继续扩展。

但 \(X\) 集合是有限的,引出矛盾。

更强的推论:二分图最大匹配数 \(=|X|-\max(|S|-|N(S)|)\)。

化为 \(\min(|X|-|S|+|N(S)|)\),将 \(|X|-|S|\) 视为割掉匹配的左侧非匹配点,\(|N(S)|\) 视为割掉右侧匹配点。

根据最小割 = 最大流 = 最大匹配就能证明了。

问题来了,既然这个简洁的模型能引出更强的推论,那么为何要引入上面的证明呢

最大权闭合子图 = 正点权和 − 最小割

实际上是很简洁明了的结论。

最小割中包含正权表示不选这个点,包含负权则表示选则这个附加代价。

因为是割,所以不会存在即保留正权点,又割掉附加代价的情况。且保有其最小性。

构造方案:未被割的正权边和已被割的正权边。

最小路径覆盖 = 总点数 − 拆点二分图最大匹配

考虑不断合并的过程,先每个点用 \(1\) 条路径覆盖,再尝试把路径串起来。

考虑将点拆成入点和出点,原图中存在的边变为出点 \(\to\) 入点。

单条路径不能分叉 同 左端点匹配唯一 相契合。

多条路径不能汇集 同 右端点匹配唯一 相契合。

而每合并一次就会导致路径数 \(-1\),所以确实是正确的。

扩展:最小路径可重复点覆盖,传递闭包再同样处理即可,没话说。

最小割树

对于一张图,任选两个点 \(u,v\),跑最小割,使得原图分割成两个集合 \(S,T\)。

路边 \((u,v,\text{cut}(u,v))\),并对 \(S,T\) 分别递归下去,知道集合大小为 \(1\)。

不难发现最终得到了一个树形结构,并且同时带来了一个很强的结论:

任意两点间最小割 = 在最小割树上两点间路径边权最小值

首先不难发现这个值是一个上界。

因为对于任选的 \(u,v\) 跑最小割分出 \(S,T\),对于 \(x\in S,y\in T\),显然有 \(\text{cut(x,y)}\leq \text{cut}(u,v)\)。

给出定理:

任取三点 \(a,b,c\),则 \(\text{cut}(a,b),\text{cut}(b,c),\text{cut}(a,c)\) 中最小值至少出现两次。

不妨设 \(\text{cut}(a,b)\) 最小,不妨设 \(c\) 在 \(S\) 这边,根据第一个结论和 \(\text{cut}(a,b)\) 的最小性就能得到 \(\text{cut}(b,c)=\text{cut}(a,b)\) 了。

随之得到一个重要结论:\(\text{cut}(a,b)\geq \min(\text{cut}(b,c),\text{cut}(a,c))\)。

针对一条树上路径,反复用上述结论就能得到 \(\text{cut}(u,v)\geq \min(\text{cut}(u,o_1),\text{cut}(o_1,o_2),\cdots,\text{cut}(o_k,v))\) 了。

再根据上面的 \(\leq\) 就证毕了。

最小割的可行边与必经边

定理:

  • 边 \((u,v,w)\) 是可行边,当且仅当满流且 \(u,v\) 在不同的强连通分量中。
  • 边 \((u,v,w)\) 是必经边,当且仅当满流且 \(s,u\) 在同一强连通分量中,\(v,t\) 在同一强连通分量中。

首先要明确最朴素的定义:

  • 边 \((u,v,w)\) 是可行边,当且仅当删除这条边(代价改为 \(0\))后最小割减少了 \(w\)。
  • 边 \((u,v,w)\) 是必经边,当且仅当将这条边代价改为 \(+\infty\) 后最小割变大。

考虑可行边:

  • 如果不满流,那么删除后,退掉 \(s\to u\) 和 \(v\to t\) 等量的 \(<w\) 的流即可,最小割减少量 \(<w\)。
  • 如果存在 \(u\to v\) 的路径,那么删除后还有 \(s\to u\to v\to t\) 的增广路,故最大流减少量同样 \(<w\)。
  • 反之,若满流且无路径则满足条件。

针对必经边:

  • 如果不满流,那么根据当前流量网络构造最小割就不包含这条边。
  • 若不存在 \(s\to u\) 或者 \(v\to t\) 的路径,那么增大它没有可能的增广路,故不符合条件。
  • 反之,若满流且存在 \(s\to u\) 和 \(v\to t\) 的路径则满足条件。

还需要证明存在 \(u\to v,s\to u,v\to t\) 的路径 \(\Leftrightarrow\) 两点在同一 SCC 中。

第一个比较好证明,因为 \((u,v)\) 满流,所以存在反向边 \((v,u)\),而又存在 \(u\to v\) 则相当于成环了。

对于 \(s\to u\),因为 \(u\to v\) 满流,说明 \(u\) 有入流量,因此有 \(s\to u\) 的一条流,对应残量网络中 \(u\to s\) 的路径,同样成环。

对于 \(v\to t\) 是同理的。

根据之前用最小割证明二分图最小点覆盖的模型,能够顺势得出很多关于二分图的结论:

  • 二分图可行边:属于当前匹配或 \(u,v\) 属于同一 SCC。
  • 二分图必经边:属于当前匹配且 \(u,v\) 属于同一 SCC。
  • 二分图可行点:任意度数非 \(0\) 节点。(任选一条出边就能找到长度至少为 \(2\) 的半增广路)
  • 二分图必经点:属于当前匹配且同 \(s\) 不属于同一 SCC。

模拟费用流

参考《模拟费用流小记 - command_block》。

默认为最小费用流,最大费用流也类似,把相关名词(如负环 -> 正环)替换即可。

经典结论:

  • 费用流的凸性。即费用是关于流量的凸函数,这是使用 EK 算法解决最小费用可行流的理论基础。

    同时本身也是很好的,可以拿来干活的性质。

  • 部分模拟费用流模型,可以拆解为每次只新增一些点边,并求新图的最小费用可行流的模型。

  • 非上述模型的费用流模型不会发生源汇边的退流

实际上,大部分模拟费用流模型都同时被贴上反悔贪心的标签,个人认为两者是内涵和外表的关系。

很多贪心使用增量的方法求解,很可能理论基础就是费用流模型新增点边的时候不会出现负环。(如 「NOI2017」蔬菜

很多贪心使用 wqs 二分优化,前提是答案具有凸性,而理论基础也很可能是有对应的费用流模型。

大概一个例题能解决很多问题:P4694 [PA2013] Raper

费用流建模为:

  • \((s,i,1,a_i)\):表示第 \(i\) 天可以第一步加工。
  • \((i,t,1,b_i)\):表示第 \(i\) 天可以第二步加工。
  • \((i,i+1,\inf,0)\):表示可以无限积累。
  • \((t,t',k,0)\):表示恰好 \(k\) 个。

求 \(s\to t'\) 的最小费用最大流就是答案,同时也证明了答案的凸性。

注意到该模型是不满足最小费用任意流模型的,因为最后一条边必须满流。但既然有凸性,就可以 wqs 二分解决掉 \(k\)。

所以有所谓的 wqs 二分 + 反悔贪心(考虑从 \(n\to 1\) 天每次新增一个点)的做法。

相比较而言,直接模拟费用流有更好的普适性(可以求解 \(1\sim k\) 的答案)和更优秀的时间复杂度。

方法也比较简单,直接在原图上找出 \(k\) 条增广路,根据上述结论 \(3\),不会发生源汇边的退流!

表现到题目中,将 \(a,b\) 的选做视作括号匹配,那么每次无非增广是加入两种括号:

  • ....(....)....
  • ....)....(....

每次加入括号 \((l,r)\) 就将在 \(l\) 处 \(+1\),\(r\) 处 \(-1\),那么括号序列合法的条件是所有前缀和 \(\geq 0\)。

第二种括号加入的条件也就是区间 \([l,r)\) 的前缀和最小值 \(>0\)。

综上可以得到一个线段树快速找到两种括号中全局较优的一种,具体实现方法与本文无关。

标签:二分,cut,匹配,text,路径,最小,笔记,网络,理性
来源: https://www.cnblogs.com/lpf-666/p/16447481.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有