网络流大~大~大~总结
前言
网络流的知识很多,很复杂,很久就想写一篇网络流的总结了。
下面介绍网络流的基本模型等。
题目一般在网络流24题里。
下文中,为了方便阅读,拥有更好的阅读体验,定理部分已经添加引用,专业名词已经用蓝色背景标出,证明部分已用下划线标出。
基本定义 & 知识 & 定理
关于网络流的基本知识和基本定理,下面会用到。
- 流量平衡
- 容量限制
- 最大流=最小割
- dinic算法
- spfa费用流
最大流
满足容量限制的情况下,流过的量尽量多。
一般有Ek,dinic,isap算法。
最小割
基本定理:
最大流=最小割
平面图与对偶图
平面图:所有的边只在顶点处相交,(边不相交)。
对偶图:对于每一个平面图, 都有与其相对应的对偶图。
平面图的最小割:spfa。
典型例题:狼抓兔子。
点覆盖集
点覆盖集是无向图的一个点集,使得该图中的所有边至少有一个端点在该集合内。点数最少的点覆盖集被称为 最小点覆盖集。
二分图中最小点覆盖集 = 二分图最大匹配数
证明:matrix67
最小点权覆盖集:带点权无向图,点权和最小的覆盖集。
建立源点,向X部每个点连边,边权为点权;建立汇点,从Y部的每个点向t连边,边权为点权,二分图中的边看成有向的,边权为inf,最小点权覆盖即最小割。
证明:建图后,任意一条从s-t的路径,一定具有s-u-v-t的形式。割的性质是不存在一条从s到t的路径。故路径上的三条边中至少有一条在割中。人为的使得(u,v)不在割中,即建立容量为INF的边(u,v)。则(s,u),(v,t)至少有一条边在最小割中,正好与点覆盖集限制条件的形式相符合(u->v,这条边,选u或者选v)。目标为求最小化点权之和,恰好也是最小割的优化模型。
点独立集
点独立集是无向图的一个点集,使得该集合中任意两个点之间不连通。点数最多的点被称为最大点独立集最大点独立集。
最大独立集与最小覆盖集互补,所以:
二分图中最大独立集 = 所有点数 - 最小点覆盖集
最大点权独立集:无向图中,点权之和最大的点独立集。
最大点权独立集 = 总权值 - 最小点权覆盖集
路径覆盖
在一个有向图中,找出最少的路径,使得这些路径经过了所有的点。
最少路径覆盖:找最少的路径覆盖了所有的点。
最小路径覆盖分为两种:
- 最小不相交路径覆盖:每一条路径经过的顶点各不相同。
- 最小可相交路径覆盖:每一条路径经过的顶点可以相同。
特别的,每个点自己也可以称为是路径覆盖,只不过路径的长度是0。
最小不相交路径覆盖:
将每个点拆成两个点,一个作为有向边的起点(出发点),另一个作为终点(接收点)。对于边(x->y),x1->y2;
现在形成了一个二分图,那么:
最小路径覆盖 = 原图的结点数 - 二分图的最大匹配数。
证明:初始每个点都是独立的一条路径,总共有n条不相交路径。每次在二分图里找到一条匹配边就相当于把两条路径合成了一条路径,相当于路径数减少了1。所以找到了几条匹配边,路径数就减少了多少。
最小可相交路径覆盖:
用Floyd做一次传递闭包,a->b有一条路径,变成a->b有一条边,然后就转化成了 最小不相交路径覆盖。
边覆盖集
边覆盖集是无向图的一个边集,使得该图中所有顶点都至少是集合内边的一个端点。
最小边覆盖集是在无向图中,边数最少的边覆盖集。
最小边覆盖=最大点独立集
闭合子图
最大密度子图
用到01分数规划。
留坑
费用流
每条边增加了一费用,表示流过这条边1流量,花费的费用。
最小费用最大流:满足最大流的前提下,费用最小。
上下界网络流
线性规划
后记
下面是在学习整理的过程中参考的文章,和感觉写的很棒的文章,可能会对这些知识进行扩展:
http://yzmduncan.iteye.com/blog/1149057
http://dsqiu.iteye.com/blog/1689505
https://blog.csdn.net/qq_34564984/article/details/52778763
https://www.cnblogs.com/justPassBy/p/5369930.html
https://www.cnblogs.com/justPassBy/p/5369930.html
https://blog.csdn.net/leolin_/article/details/7199688
备注:其实这篇文章在2018-02-23发布,然后直到2018-07-24,才开始重新整理写的。之前这篇一直干什么了?占位。。。
未完待续~