费用流做题记录(二)

链接

模拟费用流小记 - 洛谷专栏

P4694 [PA 2013] Raper - 洛谷 | 计算机科学教育新生态

Buy Low Sell High - 洛谷 | 计算机科学教育新生态

P1484 种树 - 洛谷 | 计算机科学教育新生态

Olympiad in Programming and Sports - 洛谷 | 计算机科学教育新生态

跳伞求生 - 搜索

【UER #8】雪灾与外卖 - 题目 - Universal Online Judge

P6122 [NEERC 2016] Mole Tunnels - 洛谷 | 计算机科学教育新生态

P3826 [NOI2017] 蔬菜 - 洛谷 | 计算机科学教育新生态

P5470 [NOI2019] 序列 - 洛谷 | 计算机科学教育新生态

#574. 「LibreOJ NOI Round #2」黄金矿工 - 题目 - LibreOJ

#6405. 「ICPC World Finals 2018」征服世界 - 题目 - LibreOJ

Raper

本题有两种做法

  • \(\log\) 的 wqs 二分 + 反悔贪心。
  • \(\log\) 的模拟费用流。

P4694 [PA 2013] Raper - 洛谷

wqs 二分 + 反悔贪心 记录详情 - 洛谷

模拟 SSP 记录详情 - 洛谷

无论如何,费用流建模是必须的。

Raper 的费用流建模

反悔贪心做法:由于本题可以转化为费用流模型,所以不妨设答案为 \(f(k)\)\(k\) 在图中为源点流出流量,则 \(f\) 具有凸性,于是就可以使用 wqs 二分去除 \(k\) 这一限制。

\(k\) 这一限制后,就可以反悔贪心了。具体来讲,遍历 \(i\in (1,2,\dots,n)\),同时考虑图中 \(A_i\)\(B_i\) 相关的边。模拟的费用流算法为:增量 - 轴枢

时间复杂度 \(O(n\log n\log V)\)

模拟 SSP 做法:建图后,在 SSP 算法下,增广路不会有圈,又由于图的形态,费用关于源点和汇点的边不会退流,所以就可以用线段树维护最短路。

因为流动原因,线段树需要维护区间加区间减操作,所以线段树节点要维护残量最小值
比区间最小值更大的流动区间等信息。

时间复杂度 \(O(n+k\log n)\)。该算法还可以以同样的复杂度求出 \(k\) 取遍 \((1,2,\dots,n)\) 的答案。

wqs 二分

往往能直接去除个数限制,并给复杂度添加一个 \(\log\)

费用流与凸性

由于 SSP 算法的正确性,费用流的源点流量限制最小费用形成凸包。这可能可以和很多凸相关算法结合使用。

这也常用于证明某函数的凸性。

可能的结合:

  • wqs 二分。
  • 决策单调性优化。

二分的实现

在离散的二分中,通常使用左闭右开左开右闭的实现方法。下面是伪代码。

  • 注:使用 \(P(x)\) 代表关于整数 \(x\) 的命题。

\([l,r)\) 版本:

  • function \(\text{search}(l,r)\)
    • while \(l<r\) do
      • let \(\displaystyle \text{mid}\gets\lfloor\frac{l+r}{2}\rfloor\)
      • if \([P(x)]=0\) then
        • \(l\gets\text{mid}+1\)
      • else
        • \(r\gets \text{mid}\)
    • return \(l\)

\((l,r]\) 版本:

  • function \(\text{search}(l,r)\)
    • while \(l<r\) do
      • let \(\displaystyle \text{mid}\gets\lfloor\frac{l+r+1}{2}\rfloor\)
      • if \([P(x)]=0\) then
        • \(l\gets\text{mid}\)
      • else
        • \(r\gets \text{mid}-1\)
    • return \(r\)

轴枢与增广路

这是关于费用流算法的比较。

轴枢:在图中寻找负圈,并将其推流。这一过程保持源点流出量不变

增广路:在图中寻找源汇点之间的最短路,并将其推流。这一过程将增加源点流出量,并且不会形成圈

它们的性质可以在很多费用流问题中产生作用。

可以将轴枢对应为为反悔贪心,而增广路则是简单的取最短路。

强信息反而易于维护

通常被认为是线段树技巧。可能也用于分块平衡树等。

下面的信息可能好维护:

  • 环上的和或乘积。
  • 最小值等排名相关信息。
  • 历史信息。

可能还要更多。

Buy Low Sell High

反悔贪心题。

Problem - 865D - Codeforces

Submission #302970552 - Codeforces

Buy Low Sell High - 洛谷

也可以建费用流。

种树

居然可以费用流建模?

P1484 种树 - 洛谷 | 计算机科学教育新生态

有经典的贪心做法和 wqs 二分做法。

可以使用费用流建模快速证明其正确性。

不妨设获利数组为 \(C\),则可如下图建模。(答案为流量为 \(k\) 的最小费用)似乎这种方法没什么可拓展性。

种树的费用流建模
代码懒得写了。

Olympiad in Programming and Sports

简单贪心题。

Problem - 730I - Codeforces

Submission #303489962 - Codeforces

Olympiad in Programming and Sports - 洛谷

容易建出二分图(费用流建模)。

Olympiad in Programming and Sports 的建模
直接用几个可删堆模拟一下 SSP 即可。

时间复杂度 \(O(n\log n)\)

Mole Tunnels

P6122 [NEERC 2016] Mole Tunnels - 洛谷

记录详情 - 洛谷

直接增量费用流模型即可。能够做到 \(O(n\log n)\)

增量费用流模型

性质很强。

网络流笔记 - zhiyin123123 - 博客园

posted @ 2025-02-02 22:28  zhiyin123123  阅读(97)  评论(0)    收藏  举报
目录侧边栏

qwq