网络流学习笔记(未完成)

知识点后面再补。

本文可能对于部分题目没有时间复杂度或证明,若看到了可以提醒我一下,有错欢迎指出,当然也欢迎催更。

大部分题目选自 command_block 的 网络流/二分图相关笔记(应用篇)。题单后面再整理。

符号的约定

边默认为有向边。

\(S\):源点。

\(\mathbb{S}\):从 \(S\) 出发,不经过边权为 \(w\) 的边所能达到的点集。

\(T\):汇点。

\(\mathbb{T}\):从 \(T\) 出发,不经过边权为 \(w\) 的边所能到达的点集。

\(V\):点集。

\(E\):边集。

\(cut\):最小割。

\((u,v)\)\(u\to v\) 的边。

\((u,v,w)\)\(u\to v\) 的权为 \(w\) 的边。

\((u,v,[low,upp])\)\(u\to v\) 的权在 \([low,upp]\) 之间的边。

\((u,v,w,c)\)\(u\to v\) 的权为 \(w\) 且费用为 \(c\) 的边。

\((u,v,[low,upp],c)\)\(u\to v\) 的权在 \([low,upp]\) 之间的费用为 \(c\) 的边。

\(flow\):最大流。

\(cost\):最小/大费用。

最大流建模

二分图最大匹配

首先二分图的最大匹配是可以用最大流解决的。考虑建立虚拟源汇 \(S,T\)\(S\) 连向左侧点,右侧点连向 \(T\),边权均为 \(1\)。然后再把原图上所有的 \(u\to v\) 的边赋一个 \(+\infty\) 即可。Dinic 跑二分图最大匹配的时间复杂度是 \(\mathcal{O}(m\sqrt{n})\)。证明还不会/lh。

最大权闭合子图

闭合子图定义:选出点带权(\(a_i \in \mathbb{R}\))最大的有向图子图 \(V'\)\(V'\) 可以为空),且满足 \(\nexists (u,v)\in E,u\in V',v\notin V'\)

考虑最小割。

先说建模方式:建立虚拟源汇 \(S,T\)\(S\) 连向所有正权点,边权为 \(a_i\)。所有负权点连向 \(T\),边权为 \(|a_i|\)。然后将所有原图中的边赋为 \(+\infty\)

则此时的权为:

\[\sum a_i(a_i>0)-cut \]

但是这个建模方式为什么是对的呢?

将已割的负权点和未割的正权点记作 \(A\)。这里的割/未割指的是连向源/汇的边有没有被割。

先证明这个东西是闭合子图。如果 \(A\) 不是闭合子图,则可能指向已割的正权点或未割的负权点。指向负权点则肯定还要割。指向正权点的话,因为该点在原图上连出去所能到达的负权点的点集中,一定有没有被割掉的(否则就不用割掉这个正权点了),所以就不会指向已割的正权点(否则还需再割)。

权是 正权点的权和-割 是因为割掉的正权点不在 \(A\) 中,割掉的负权点在 \(A\) 中,但连向 \(T\) 的权是反的。然后求的是最大权,所以就要求最小割了。

还不知道这种建模方法是怎么想到的呢/gg


posted @ 2024-01-08 08:38  Pengzt  阅读(14)  评论(0编辑  收藏  举报