网络流复健

最大流

通过反向边反悔。

考察 \(S\rightarrow u\rightarrow v\rightarrow T\),设 \(a=f(u,v)\) 。若有增广路 \(S\rightarrow v\rightarrow u\rightarrow T\),流量为 \(b\),通过反向边的定义可知 \(a\ge b\),考虑 \(u\rightarrow T\) 的流量为 \(b\)\(u\rightarrow b\) 的流量为 \(a-b\),相当于在 \(u\) 点分流,仍满足流量限制。

经过反向边的增广路可以规约为不经过反向边的增广路。

\(A,B\)\(G\) 的一组割,记 \(P=\sum\limits_{u\in A,v\in B}f(u,v)-\sum\limits_{u\in B,v\in A}f(u,v)\)(即正向割边流量与反向割边流量的差),\(R=\sum\limits_{u\in A,v\in B}c(u,v)\)

对于 \(G\) 的任意一组流,其流量等于 \(P\)

证明:考虑 \(S\in A,T\in B\),所以 \(+f\) 的贡献比 \(-f\) 的贡献多 \(1\),那么 \(F=P\)

显然 \(P\le R\)

故任意一个流的大小 $\le $ 任意一个割的正向边容量之和。

当残量网络上没有增广路时,记 \(A\)\(S\) 能到达的点集,\(B=V-A\),则 \(A,B\) 为一组割。

那么此时流量等于割中正向割边流量减反向割边流量,显然正向割边流量为其容量,反向割边流量为 \(0\)(否则 \(A\) 变化),此时流量 \(F=\) 割中正向边容量之和。

同时也证明了最大流最小割定理。

dinic

进行一次增广后,\(S\) 到任意点最短距离单调不降。

每次增广 \(S\)\(T\) 的最短路单调上升,增广轮数是 \(\mathcal{O}(n)\) 的。

每轮增广考虑每条增广路,必然存在一条边被删去,结合当前弧优化,不会访问没有流量的边,每轮复杂度 \(\mathcal{O}(nm)\)

两者结合,得到 dinic 理论复杂度上界为 \(\mathcal{O}(n^2m)\),但实际效率为 \(\mathcal{O}(nm)\)

费用流

正确性证明

凸性

EK

每次增广一条费用最小的增广路。

dinic

每次增广所有费用最小的最短路,注意这里的复杂度是均摊的。

复杂度都是 \(\mathcal{O}(nmf)\)

最大费用最大流咋搞

最小割

最小割可行边与必经边

定义:

  • \((u,v,w)\) 为可行边,当且仅当删除这条边(代价改为 \(0\) )后最小割减少 \(w\)
  • \((u,v,w)\) 为必经边,当且仅当将 \(w\) 改为 \(\infty\) 后最小割变大

充要条件:

  • \((u,v,w)\) 为可行边,当且仅当 \((u,v)\) 满流,\(G'\) 上不存在 \(u\rightarrow v\) 的路径

    后一个条件可转化在 \(G'\)\(u,v\) 不在同一个 scc 内

  • \((u,v,w)\) 为必经边,当且仅当 \((u,v)\) 满流,\(G'\) 上存在 \(S\rightarrow u\)\(v\rightarrow T\) 的路径

    后一个条件可转化为 \(S,u\) 在同一 scc 内,\(v,T\) 在同一 scc 内。

上下界网络流

二分图

二分图匹配,边覆盖,点覆盖,独立集

下面两个对一般图成立的定理:

  • 最小边覆盖 \(+\) 最大匹配 \(=|V|\)

    一条边的贡献为 \(1,2\) 。那么直接选择最大匹配的边集,后面的边的贡献都为 \(1\)

    设最大匹配边集为 \(E'\),则最小边覆盖大小为 \(|E'|+|V|-2|E'|=|V|-|E'|\)

  • 最小点覆盖 \(+\) 最大独立集 \(=|V|\)

    最小点覆盖取补为最大独立集,反过来也是如此。

    那么最小点覆盖与最大独立集构成双射。

对二分图成立的定理:

  • 二分图最大匹配 \(=\) 最小点覆盖

    最小点覆盖 \(\ge\) 最大匹配 \(|E'|\) 。假设最小点覆盖 \(<|E'|\),那么根据抽屉原理,\(E'\) 中至少存在一条边没被覆盖,矛盾。

    \(V'=\{残量网络上\,S\,不能到达的左部点+S\,能到达的右部点\}\)

    下证 \(V'\) 为一组最小点覆盖

    首先所有非匹配点不属于 \(V'\),因为:

    • 左部非匹配点与 \(S\) 连边容量为 \(1\)
    • 右部非匹配点假设存在一个左部非匹配点能到达,与最大匹配矛盾

    其次对于每一组匹配节点 \((u,v)\),要么 \(u\in V'\),要么 \(v\in V'\)

    因为 \(u\) 为匹配点,\((S,u)\) 剩余容量为 \(0\)\(u\) 只能通过 \((u,v)\) 的反向边到达。

    \(u\) 能到达,则 \(v\) 能到达,反之也是如此,那么 \(u,v\) 要么都能到达,要么都不能到达。

    故要么 \(u\in V'\),要么 \(v\in V'\),则 \(|V'|=|E'|\)

    最后要证 \(V'\) 为一组点覆盖

    • \((u,v)\) 为匹配边,恰有一个端点在 \(V’\)
    • \((u,v)\) 为非匹配边。假设 \(u,v\) 都没覆盖,那么 \(S\rightarrow u\)\(S\nrightarrow v\),但因为 \((u,v)\) 的剩余容量为 \(1\),那么 \(S\rightarrow v\),矛盾

    实现考虑从左部非匹配点出发,依次走 非匹配 - 匹配,最后左部非标记点和右部标记点构成 \(V'\),相当于找到了 \(S\) 能到达的右部点。

posted @ 2024-02-22 20:47  Tagaki  阅读(25)  评论(0)    收藏  举报