(坑)网络流浅谈

来源:互联网 发布:零云cms 编辑:程序博客网 时间:2024/06/05 20:37

神奇的网络流QAQ。。

最小割:

割:将原图G中点分为S,T两个点集,连接S到T的边集就是割。

对于从起点到终点的一条路径上的割线,其权值一定>=min(路径上边的权值)。

而对于一条流,其流量一定<=min(路径上边的权值)。

所以有最小割=最大流。


二分图最大匹配:

二分图:图中所有点可以分成两类S,T,其中任意一类中点没有边相连。所有边都连接S,T。

对于边集Q∈G,如果Q中任意两条边不连接一个顶点,且边数最大,即为最大匹配。

一般用匈牙利算法求解,此算法本质上也是最大流, 但不需要建模,而是利用了二分图的特点,简化了最大流算法。

其仍然是每次都找一条增广路径,直到没有解时停止。


最小径覆盖:

对于一个路径集P,任意M∈P,M不与M’有节点相交。且路径覆盖了图G中所有节点。

即为最小路径覆盖。

求解方式:图G中节点数-最大匹配。

我们将原图每一个节点拆分为i和i'。构造出一个二分图,求出新图的最大匹配。

证明:

上图中,对应左边的DAG构造了右边的二分图,可以找到二分图的一个最大匹配M:1->3' 3->4',那么M重的这两条匹配边怎样对应DAG中的路径的边呢?
使二分图的一条边对应于DAG中的一条有向边:1->3'对应于左图的1->3,这样DAG中的1就有一个后继结点(3回事1的唯一后继结点,因为二分图中的一个顶点之多关联一条边!),所以1不会成为DAG中的一条路径中的结尾顶点,同样,3->4'对应于左图的3->4,3也不会成为结尾顶点,那么原图中总共有4个顶点,减去2个有后继的顶点,还有两个顶点,即DAG路径的结尾顶点,每个即为顶点对应一个路径。二分图中寻找最大匹配M,就是找到了对应DAG中的非路径结尾顶点的最大数目,那么DAG中|V|-|M|就是DAG中结尾顶点的最小数目,即DAG的最小路径数目


二分图最小点覆盖:

用最少的点覆盖图中所有边,可以证明与最大匹配相等。

证明:

因为已知了最大匹配,所有再也不能找到增广路了,有最大匹配定义知。

现在所有的边就剩下两种情况了,一种是匹配,一种是不匹配。

假设所有的匹配边有n条,那么左右边就都有n个匹配边的顶点了,标记所有左边匹配边的顶点,则有n个。

问题就是证明n=最小点覆盖,即证明最大匹配数n到底能不能覆盖所有的边入手。

考察右边的匹配边的顶点,明显,左边都可以找到其匹配点且为n,说明所有匹配边已经被这左边的n个点关联了。

接下来证明未匹配边也能被这左边的n个匹配的点关联那么不就证明了“,使这些点和所有的边都有关联(把所有的边的覆盖)”吗。。

对于剩下的未匹配边,每条边都有一个右边点(显然既然是未匹配边,这个点自然是未匹配点)和左边点(我将证明着些左边点都是匹配边的顶点,证明了这一点,也就证明了这左边的n个点也和剩下的未匹配边关联了)

假设上面说的左边点不在这n个匹配边的左边点之中,那从剩下的某个未匹配边的右边点出发不就可以找到增广路了吗(想想增广路的定义就知道了,右未匹配,左未匹配的话那就可以找到增广路了),所以左边点也在匹配边之中,。所以就证明了剩下的未匹配边关联的范围也在这左边的n个匹配点的范围内力了。

也就证明了这n个左边匹配边的点既也右边匹配边关联,也与右边未匹配边关联了,即与所有边关联了。

那么按照最小覆盖的定义,接下来只要证明这个n是做小值就行了。

假设可以比n小,那就相当于随便删一些匹配边,那么这些删除了边的右边点就没人匹配了,也就不满足与所以边关联了,所以矛盾,所有n就是最小值。

故得证。



二分图最大独立集:

答案是总数减去最小点覆盖。


上图,我们用两个红色的点覆盖了所有边。我们证明的前提条件是已经达到最小覆盖。
即条件1.已经覆盖所有边,条件2.所用的点数最小
首先我们来证明蓝色点组成的是一个独立集:如果有两个蓝色点间有边相连,那么这条边则没有被覆盖,则与条件1矛盾。因此是独立集。
再来证明这个独立集最大: 如果我们要再增加这个独立集中的点,则需要把某个红点变成蓝点。而由最小覆盖数=最大匹配数的证明我们知道,每一个红点是最大匹配中的一个匹配点,也就是说每个红点至少连接了一条边。因此当我们将某个红点变成蓝点时,我们需要牺牲的蓝点的个数是大于等于1的。也就是说,我们最多只能找到数量相等的其他独立集,而无法找到数量更大的。因此蓝色点集必定为最大独立集。 蓝色点数 = 总点数 - 红色点数,即最大独立集=总数-最小覆盖集。

二分图最大权匹配:KM算法(还不会)


最小点权覆盖:

从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 

将原二分图中的边(u,v)替换为容量为INF的有向边(u,v),设立源点s和汇点t,将s和x集合中的点相连,容量为该点的权值;将y中的点同t相连,容量为该点的权值。在新图上求最大流,最大流量即为最小点权覆盖的权值和。


最大点权独立集:


最大权闭合子图:



最小边覆盖: