昨天忘记传了喵~

Content:网络流
Date:2025.8.12

课堂内容

二分图匹配

Hall 定理

假设 G=(X,Y,E)G = (X,Y,E) 是一个二分图,且 XY|X| \le |Y|。对于 WXW \subseteq X,记 NG(W)N_{G}(W) 表示在图 GG 中所有与集合 WW 中的点相邻的点的集合。那么 XX 的完美匹配存在,当且仅当 WNG(W)|W| \le |N_G(W)| 对于所有 WXW \subseteq X 存在。

匈牙利算法

不断搜索增广路,每次考虑一条增广路,看看把一个匹配拆了能否增加一个新的匹配。

模板代码:Link

网络最大流算法

Dinic

Dinic 是求解网络最大流的其中一个算法,也是最常用的算法。其核心思想为:每次用 BFS 寻找增广路,然后用 DFS 统计增广路上的最大流量。但是这样会有一些问题,如果给定的网络是如下情况的话:

img

如果直接按照上面说的方法走,第一次增广路可能是 12341 \to 2 \to 3 \to 4,但实际上最优的是 1241 \to 2 \to 41341 \to 3 \to 4。所以为了解决这个问题,我们需要对原图的所有边建立反向边 (v,u,0)(v,u,0)。如果我们选择了这条路,则将其反向边的流量减去我们现在流过这条边的流量,这样可以做到类似反悔贪心的效果。

模版代码:Link

费用流

最小费用最大流 (Min Cost Max Flow, MCMF)

和原来的网络图相比,每一条边新加了一个限制 cc 表示流过 11 个单位的流量需要花费 cc 的代价。

我们在原来的 Dinic 算法的基础上进行修改,每次沿着最短路径进行增广。由于有带负权的反向边存在,我们不能使用 Dijkstra,而是要使用 SPFA。

模板代码:Link

题目

Luogu-P3254 圆桌问题

题目描述

一共有 mm 个不同国家的代表团来参加国际会议,第 ii 个代表团共有 rir_i 个代表参加会议,会议场地内共有 nn 张桌子,每张桌子最多可以做 cic_{i} 个人。规定一张桌子上不能坐超过一个相同代表团的人。问是否存在一种合法的分配方案。

解题思路

因为一张桌子最多可以做一个同一个代表团的代表,所以我们将每个代表团向每个桌子建一条流量为 1 的边。然后我们把超级源点和每个代表团之间链接一条流量为 rir_{i} 的边,再把所有桌子和超级汇点连接一条流量为 cic_{i} 的边,然后跑最大流即可。

提交记录:Link