网络流和图匹配
这次不作为杂谈了,,,简直是大工程
图的匹配
网络流
考虑用一种新的顺序来讲网络流,本文长文警告。网络流的重点在于如何把一个问题建模成网络流的问题,然后再根据图的性质来选择合适的算法。
流
网络是一个有向图 \(G=(V,E)\),每条边有一个流量限制 \(c(u,v)\),即流过这条边的流不能超过这个限制。其中有两个特殊的点,源点 \(s\) 和汇点 \(t\)。其中 \(s\) 有无限的流流入,\(t\) 可以接受无限的流。
流是一个函数 \(f(u,v)\) 满足 \(f(u,v) \le c(u,v)\),\(f(u,v)=-f(v,u)\),\(\sum f(u,x)=\sum f(x,v)\)。记 \(d_u=\sum_{(v,u)\in E}f(u,v)-\sum_{(u,v)\in E}f(u,v)\),若 \(d\) 全为 \(0\),则称这条流是循环流。否则存在 \(d_s=-d_t\ne 0\),且其他都是 \(0\)。
我们称最大的一组 \(d\) 的和的 \(f\) 集合为 \(s-t\) 最大流。如果边带权,没流过 \(1\) 流浪,需要 \(w(u,v)\) 的费用,则称在满足流量最大的情况下,
增广路是指一条 $f(u,v)>0$ 且 \(f(u,v)<c(u,v)\) 的从 \(s\) 到 \(t\) 的路径。定理:如果不存增广路,则当前流是一个最大流。
最大流增广路算法(EK 算法):考虑依次加入一条增广路使得不存在增广路,在加入增广路的时候需要维持反向边的流量。