网络流

网络流算法//最大流//EK算法//dinic算法//最小(大)费用最大流(待续)

南笙酒味 提交于 2019-11-26 14:24:34
目录 最大流流算法 (EK算法) 时间复杂度 O(V*(E^2)) Dinic算法 时间复杂度O((V ^ 2) * E) 在洛谷题解中看到了一句很有启发的话:网络流善于解决各种有要求的匹配 联想到题目是匹配问题,且满足网络流要求的数据范围,可以尝试网络流 V是点的数目,E是边的数目 最大流流算法 (EK算法) 时间复杂度 O(V*(E^2)) 定义 : 我们有一个 源点(只有流出量) 和 汇点(只有流入量) 每条边有一个 流量 和 容量,流量最初为0,容量是题目告知我们的,我们要求的是 在所有边的 流量 <= 容量 && 每个点流入量 = 流出量 时,流入汇点的最大流是多少。 首先我们需要知道 残留网络 : 残留网络就是反向图的流量,我们正向遍历一个图,会走一条路径到汇点。 一条路径的 增广路 = min(经过的每条边的 {容量 - 当前流量} ) 但是我们这条边可能是反向的流,所以 正向边的容量 -= 增广路 反向边容量 += 增广路 找到增广路,我们就 flow += 增广路 当找不到增广路就结束了这个算法。 因为看了vector建图和链式前向星建图的效率和空间差异,就手动改了一下模板,不用常用的mp[][] 数组标记,练习一下链式前向星。不太懂的,这里看看 https://blog.csdn.net/castomere/article/details/80426485