20220104-EK求最大流
发表于
本文字数:
3.3k
阅读时长 ≈
3 分钟
EK求最大流
1. 最大流知识点梳理
- 基本概念
- 流网络,不考虑反向边
- 可行流,不考虑反向边
- 两个条件:容量限制、流量守恒
可行流的流量=从源点流出的流量-流入源点的流量
- 最大流是指最大可行流
- 残留网络,考虑反向边,残留网络的可行流$f^{‘}$ + 原图的可行流$f$ = 原图的另一个可行流
|f' + f| = |f'| + |f|
|f'|
可能是负数
- 增广路径
- 割
- 割的定义
- 割的容量,不考虑反向边,最小割是指容量最小的割
- 割的流量,考虑反向边,
f(S, T) <= c(S, T)
- 对于任意可行流$f$,任意割
[S, T]
,有|f| = f(S, T) <= c(S, T)
- 最大流最小割定理
- 可行流$f$是最大流;
- 可行流$f$的残留网络中不存在增广路;
- 存在某个割
[S, T]
,有|f| = c(S, T)
;
- 算法【网络流的时间复杂度just a joke】
- EK算法 $O(nm^2)$
- Dinic算法 $O(n^2m)$
- 应用
- 二分图:二分图匹配、二分图多重匹配
- 上下界网络流:无源汇上下界可行流、有源汇上下界最大流、有源汇上下界最小流
- 多元汇最大流
2. EK算法具体实现
思路:首先存下图,建立反向边,构建残余网络,在残余网络中不断寻找增广路径,维护残余网络,将其累加至答案中,知道找不到增广路径。具体代码如下:
1 | #include<bits/stdc++.h> |
3. Dinic算法具体实现
概念:在稀疏图上和EK算法效果差不多,但是在稠密图上优势明显。
思路:EK算法在寻找增广路径时候是一条一条找的,显然比较低效。因此Dinic实现了多路增广;
- 多路增广:在使用EK算法时,由于我们使用bfs找增广路,当每次贪心取得一条增广路并增广后,我们从汇点沿着增广路往前走,很可能会遇见一些点实际经过的流量小于该点所有入度的容量和,或者说在残量网络中,该点的入度和出度均大于0。我们可以利用该店后向弧的残量向该点前向弧增广。由于涉及回溯,bfs不适用;
- 当前弧优化:对于增广操作,对于任意节点,我们每增广它的一条前向弧,意味着这条弧后所有的边都被我们多路增广过了,当我们再次处理该节点时,可以不用考虑这条弧。或者说,如果一条边已经被增广过,那么它就没有可能被增广第二次。那么我们下一次进行增广时,可以不走那些已经被增广过的边。
1 | #include<bits/stdc++.h> |
20220101-网络流24题
发表于
本文字数:
545
阅读时长 ≈
1 分钟
网络流24题
0. 概述
问题编号 | 问题名称 | 问题模型 | 转化模型 |
---|---|---|---|
1 | 飞行员配对方案问题 | 二分图最大匹配 | 网络最大流 |
2 | 太空飞行计划问题 | 最大权闭合图 | 网络最小割 |
3 | 最小路径覆盖问题 | 有向无环图最小路径覆盖 | 网络最大流 |
4 | 魔术球问题 | 有向无环图最小路径覆盖 | 网络最大流 |
5 | 圆桌问题 | 二分图多重匹配 | 网络最大流 |
6 | 最长递增子序列问题 | 最多不相交路径 | 网络最大流 |
7 | 试题库问题 | 二分图多重匹配 | 网络最大流 |
8 | 机器人路径规划问题 | 最小费用最大流 | |
9 | 方格取数问题 | 二分图点权最大独立集 | 网络最小割 |
10 | 餐巾计划问题 | 线性规划网络优化 | 最小费用最大流 |
11 | 航空路线问题 | 最长不相交路径 | 最小费用最大流 |
12 | 软件补丁问题 | 最小转移代价 | 最短路径 |
13 | 星际转移问题 | 网路判定 | 网络最大流 |
14 | 孤岛营救问题 | 分层图最短路径 | 最短路径 |
15 | 汽车加油形式问题 | 分层图最短路径 | 最短路径 |
16 | 数字梯形问题 | 最大权不相交路径 | 最小费用最大流 |
17 | 运输问题 | 网络费用流量 | 最小费用最大流 |
18 | 分配问题 | 二分图最佳匹配 | 最小费用最大流 |
19 | 负载平衡问题 | 最小代价供求 | 最小费用最大流 |
20 | 深海机器人问题 | 线性规划网络优化 | 最小费用最大流 |
21 | 最长k可重区间集问题 | 最大权不相交路径 | 最小费用最大流 |
22 | 最长k可重线段集问题 | 最大权不相交路径 | 最小费用最大流 |
23 | 火星探险问题 | 线性规划网络优化 | 最小费用最大流 |
24 | 骑士共存问题 | 二分图最大独立集 | 网络最小割 |
2022不摆烂: )
20220101-《算法导论》第26章-最大流
20220101-《算法导论》第25章-每对顶点间的最短距离
20211225-组合数学概述
发表于
本文字数:
1.1k
阅读时长 ≈
1 分钟
20211225-如何理解0-1背包是NPC问题
发表于
本文字数:
315
阅读时长 ≈
1 分钟
如何理解0-1背包是NPC问题?
1. 分析
在0-1背包问题中,我们需要2个输入(一个数组和一个整数)来解决这个问题。
- n个项目的数组$\{n_1, n_2, …\}$,每个项目都有它的价值指数和权重指数;
- 整数W作为最大可接受的重量。
假设
n=10, W=8
,则:
n = [n1, n2, ..., n10], W=1000
,因此时间复杂度为T(n)= O(nW)= O(80)
。若将
n
的大小加倍:T(n)= O(nW)= O(20 * 8)= O(160)
;- 若将
W
的大小加倍:并不意味着W = 20,而是长度是两倍,即W = 10000000
,因此:T(n)= O(nW)= 0(10 * 128)= 0(1280)
;- 因此所需时间以指数增加,这是一个NPC问题。
- 因此,它是一个伪多项式。
20211225-Primal-Dual原对偶问题
发表于
更新于
本文字数:
1k
阅读时长 ≈
1 分钟
20211221-Pareto最优
发表于
本文字数:
553
阅读时长 ≈
1 分钟
20211220-Set Cover Problem
发表于
更新于
本文字数:
1.3k
阅读时长 ≈
1 分钟