这一篇就是没事儿瞎扯了,包括简单的定理简单的证明,还有……反正想到什么些什么啦。
最小割最大流定理:
割的概念:
对于一张流量图G,断开一些边后,源点s和汇点t就不在连通,我们将这样的k条边的权值(即最大容量)和求和,求和后的值称为割。显然,对于一张流量图G,割有很多个且不尽相同。我们要求的就是所有割中权值最小的那一个(可能不唯一),即花最小的代价使s和t不在同一集合中。
最小割定理:
在一张流量图G中,最大流=最小割。
证明:
我们知道,跑完最大流之后,源点s和汇点t不再连通,而此时那些阻塞边(满流边 )必然对应原图中的一个割,现在假设我们将任意一条阻塞边与其所在的s->u->v->t的路径上的其它边替换,因为阻塞边必然为此路径上的最小边(根据增广路性质),因此,替换后的割>=原来的割,因此,最大流即为最小割。
若还不理解,那么就换一种方法证明:
我们设flow为s到t的净流量(即s的出流量或t的入流量),显然flow<=maxflow;而maxflow<=任意割,这是为什么呢?请回到上文的证明(好吧,其实和之前的证明没什么不同,但可以结合着来看是不是?)。
那么我们得到如下关系:
flow<=maxflow<=任意割
所以当割最小时,flow必须最大即最大流。
最大流=二分图最大匹配数=最小点覆盖:
我们知道,最大匹配数可以用最大流跑出来,其实,最大匹配是等于最小点覆盖数的。
下面给出大佬博客证明(请大家耐着性子读完,当你学到网络流,应该有较为扎实的代码基础和思维基础了):
http://www.matrix67.com/blog/?s=%E6%9C%80%E5%B0%8F%E8%A6%86%E7%9B%96%E7%82%B9
引用自Matrix67大佬博客。