网络流
最大流
问题简述:
有一个有向图,存在源点 S S S 和汇点 T T T,每条边有一个流量,求从 S S S 到 T T T 最多能经过多少流量。
例如,在下图中:
最大流为 4 4 4。
最小割
割:表示一个切面或切线,将网络分为分别包含源点和汇点的两个子集,该切线或切面与网络相交的边的集合,称为图像的割。
最小割:网络的所有割中,边权值和最小的割。
具体解释还可以参考百度百科。
显然的,最大流=最小割。
Ford-Fulkerson算法
基本思想:
这是一种贪心思想,只要存在从源点到汇点的路径,我们就沿着其中一个扩充路径(具有可用容量的路径)发送流。 然后我们找到另一条路径,依此类推。
当不再能够找到流量增加路径时,将达到最大流量。
但是可能存在一直循环的情况,流可能甚至不会收敛到最大流量。
Dinic算法
每次 b f s bfs bfs先把图分层,然后在分层图上增广(多路增广,当前弧优化)。
经典模型
最大权闭合子图
有一个有向图,选择某个点就必须选择其后继点。选择每个点都有一个花费或奖励,求总奖励的最大值。
解决方案:
建图,所有正权点连向S,所有负权点连向T,假设初始全选所有的正权点,减掉最小割即为答案。
最小费用最大流
每条边有一个费用,每经过1的流量就会消耗固定的费用,求最大流时费用最小是多少。
解决方案:
建反向边然后贪心,每次找最短的增广路。
上下界网络流
- 上下界可行流
- 有源汇上下界最小流
- 有源汇上下界最大流
- 上下界最小费用可行流
二分图匹配
问题简述:
给定一个二分图,左侧n个点右侧m个点,求能选出多少条端点不重复的边。
可以用匈牙利算法或 Dinic \text{Dinic} Dinic 算法求解。
Hall定理
是一个用来判断二分图是否存在完美匹配的定理。
内容如下 二 分 图 存 在 完 美 匹 配 ⟺ 对 于 任 意 S , 都 有 ∣ N ( S ) ∣ > = ∣ S ∣ 二分图存在完美匹配\iff 对于任意S,都有|N(S)|>=|S| 二分图存在完美匹配⟺