最大流之算法模板
最大流之二分图匹配
最大流之上下界可行流
对于每一条边容量都有上下界限制:下界 <= 容量 <= 上界,
转化一下:下界-下界 <= 容量-下界 <= 上界-下界,那么,
每个点减去了它所有入边的下界,令合计为S1,
每个点减去了它所有出边的下界,令合计为S2,
那么对于这个点,少出去了S1的容量,少进来了S2的容量,
若S1-S2>0,少进的更多,则从源点S向其连补偿边(容量S1-S2),
反之少出的更多,从其向汇点T连补偿边(容量S2-S1)
- AcWing 2188. 无源汇上下界可行流
构建虚拟源汇点S,T,并添加补偿边,跑dinic()返回值大于虚拟源点补偿边总和即有解 - AcWing 2189. 有源汇上下界最大流
构建虚拟源汇点S,T,并添加补偿边,对初始源汇点额外添加边{t,s,inf},解为:
构造图S-T的dinic() + 删去边{t,s,inf}后s-t的dinic() - AcWing 2190. 有源汇上下界最小流
建图同上,但解为:
构造图S-T的dinic() - 删去边{t,s,inf}后t-s的dinic()
最大流之多源汇最大流
最大流之关键边
决定是否为关键边的条件为:
①当前边的流量未达容量上限,即残留网络正向边容量不为0
②从源点搜增广路能到达当前有向边的起点
③从汇点搜增广路能到达当前有向边的终点
最大流之最大流判定
- AcWing 2277. 秘密挤奶机
- AcWing 2187. 星际转移问题
建立分层图,不断枚举时间的推进,按时序来扩大残留网络
最大流之拆点
经典模型,将问题转化为:单个点有限定的使用次数后,单个点拆成一对点:入点和出点,两点连边,边容量即为使用次数
最大流之建图实战
经典模型,建分层图虽可做,但建出的残留网络过于庞大且不可控,
点睛之笔:
未被访问的猪舍,直接从源点向当前顾客连一条容量为猪舍容量的边,
已被访问的猪舍,从最后访问的顾客向当前顾客连容量为正无穷的边,