费用流做题记录(一)

P4016 负载平衡问题 - 洛谷 | 计算机科学教育新生态

P4452 [国家集训队] 航班安排 - 洛谷 | 计算机科学教育新生态

P2045 方格取数加强版 - 洛谷 | 计算机科学教育新生态

P2050 [NOI2012] 美食节 - 洛谷 | 计算机科学教育新生态

P2053 [SCOI2007] 修车 - 洛谷 | 计算机科学教育新生态

P2770 航空路线问题 - 洛谷 | 计算机科学教育新生态

P3159 [CQOI2012] 交换棋子 - 洛谷 | 计算机科学教育新生态

P3356 火星探险问题 - 洛谷 | 计算机科学教育新生态

P3358 最长k可重区间集问题 - 洛谷 | 计算机科学教育新生态

P4013 数字梯形问题 - 洛谷 | 计算机科学教育新生态

P4015 运输问题 - 洛谷 | 计算机科学教育新生态

P5331 [SNOI2019] 通信 - 洛谷 | 计算机科学教育新生态

网络流库

网络流库 - zhiyin123123 - 博客园

负载平衡问题

简单贪心费用流

P4016 负载平衡问题 - 洛谷

网络流做法 记录详情 - 洛谷

贪心做法

枚举断点进行断环成链,然后在链上贪心。正确性的话,是因为断点一定存在。

容易做到 \(O(n^2)\)

费用流做法

首先,算出平均值 \(\overline A\),设源点为 \(S\),汇点为 \(T\),建立点 \(1,2,\dots,n\),然后

  • \(A_i>\overline A\),连 \(S\to i\),容量为 \(A_i-\overline A\),费用为 \(0\).
  • \(A_i<\overline A\),连 \(i\to T\),容量为 \(\overline A-A_i\),费用为 \(0\).

然后 \(\forall i,j,i+1\equiv j\ (\operatorname{mod} n)\)

  • \(i\leftrightarrow j\),容量为 \(\inf\),费用为 \(1\).

然后最大流的最小费用就是答案。

复杂度小常数 \(O(n^3)\)SPFA + EK).

航班安排

P4452 [国家集训队] 航班安排 - 洛谷

记录详情 - 洛谷

按照时间个给机场建分层图(跑费用流)复杂度错误,但是,分层图中有用的节点个数只有 \(O(M)\) 个,所以可以暴力两两连边,正确性由数据范围的 \(t_{i,j}\leq t_{i,k}+t_{k,j},f_{i,j}\leq f_{i,k}+f_{k,j}\) 保证。

复杂度为 \(O(N^3K)\)

有些细节没说。

方格取数加强版

P2045 方格取数加强版 - 洛谷

记录详情 - 洛谷

直接把走的 \(k\) 次看成 \(k\)即可。

实现时,需要拆点。

复杂度 \(O(kn^5A)\).

美食节

P2050 [NOI2012] 美食节 - 洛谷

记录详情 - 洛谷

考虑使用厨师匹配菜,尝试使用费用流

发现,一个初始做的第 \(i\) 道菜代价会 \(\times i\)(拆贡献),所以建立分层图,以厨师编号和已做菜数量建立。每个分层厨师都要和所有菜的节点连边。

直接建图点数 \(\Theta(mp+n)\),边数 \(\Theta((mp+n)n)\)边数太大,费用流跑不动。

于是卡常,进行动态开点,厨师做了菜才会做下一道菜,所以可以每增广一次就判断最后一层厨师是否被经过,如果经过了,就开下一层点。

边数 \(\Omega((n+m+p)n)\),根本卡不掉。

动态开点 or 边

十分强大的卡常技巧。

航空路线问题

这题有🤡【小丑】 dp 做法。

P2770 航空路线问题 - 洛谷

费用流做法 记录详情 - 洛谷

费用流做法

把一来一回看成从左到右的两条流。然后就很简单了。

复杂度 \(O(nm)\)\(O(n^3)\))。

dp 做法:(没写)

还是看成从左到右的两条流。

\(f[i][j]\) 表示两条流目前分别走到了 \(i,j\) 节点,接下来只能往 \(\max\{i,j\}\) 之后转移。正确性显然。

暴力实现复杂度 \(O(n^3)\)

交换棋子

负载平衡问题。

P3159 [CQOI2012] 交换棋子 - 洛谷

记录详情 - 洛谷

需要注意的是,一条流的开头和结尾的交换次数为 \(1\),中间为 \(2\)

最长 \(k\) 可重区间集问题

P3358 最长k可重区间集问题 - 洛谷

记录详情 - 洛谷

如下图所示建图。

by xuxinyu 12260.png (612×399)

点数 \(O(n)\),边数 \(O(n)\),最大流 \(O(k)\),复杂度 \(O(n^2k)\)SPFA + EK)。

通信

归并排序优化建图或主席树优化建图。可以使用网络单纯形暴力通过。

P5331 [SNOI2019] 通信 - 洛谷

归并排序优化建图 评测记录 - 洛谷

网络单纯形暴力建图 记录详情 - 洛谷

二合一 记录详情 - 洛谷

首先,把问题转化成最小权链覆盖,具体的,把每个哨站拆成入点出点,然后前后匹配。

暴力建图边数是 \(O(n^2)\) 的。

对于值域,显然可以建立值域链,不过有前后连边的方向要求。

可以用归并排序优化为 \(O(n\log n)\),使用主席树同样可以。

归并排序的更多应用

本题是二维偏序的建图,但用扫描线要套上主席树,而归并排序就是一种更好些的做法。

此时,归并排序不止能由于三位偏序了。

类似的应用可能是分治 FFT

网络单纯形

远快于其他费用流算法,好写,但有点长。

跑网络流没有 HLPP 快。

posted @ 2025-01-24 20:15  zhiyin123123  阅读(29)  评论(0)    收藏  举报
目录侧边栏

qwq