最大流:html
(1)最大流定义:
算法
在容量网络中,知足弧流量限制条件,且知足平衡条件而且具备最大流量的可行流,称为网络最大流,简称最大流。数组
(2)最大流判断两点之间是否有流量:网络
经过判断它的逆向边是否有流来实现。spa
费用流:.net
(1)费用流定义:xml
费用流,也叫做最小费用最大流,是指在普通的网络流图中,每条边的流量都有一个单价,求出一组可行解,使得在知足它是最大流的状况下,总的费用最小。 htm
2.初始化spfa时dis数组全从INF改成-INF,松弛的条件从 dis[i]>dis[j]+cost[i,j]改成dis[i]<dis[j]+cost[i,j] 。blog
最小割:get
(1)最小割定义:
假设在原图中,删掉某些边,可以使得从s出发到不了t,则这些边的集合被称做图的割。 定义最小割,为容量和最小的割。
(2)最大流最小割定理:
最大流最小割定理是网络流理论的重要定理。是指在一个网络流中,可以从源点到达汇点的最大流量等于若是从网络中移除就可以致使网络流中断的边的集合的最小容量和。即在任何网络中,最大流的值等于最小割的容量。
(3)输出最小割:如果要输出最小割,在最后dinic算法结束的残留网络中,从源点寻找全部与源点仍然链接的点,并打上标记。这样若某一条边的两个端点,一个带标记,一个不带标记,则这条边能够做为最小割的边删去。我我的理解这样删去的边应该是第一阶段满流的那几条边。这样删除的边最后确定是知足最小割的,可是边数可能不是最少的。
(4)求最小割且割数最小:
跑两遍dinic,第一遍跑最大流,求得最小割是多少,第二遍把第一遍中满流的边权设为1,其余设为inf,再跑一边最小割,求得最少须要割去几条边。
最大权闭合子图:
(1)定义:
一个子图(点集), 若是它的全部的出边都在这个子图当中,那么它就是闭合子图。 点权和最大的闭合子图就是最大闭合子图。
(2)求最大权闭合子图:
设s为源点,t为汇点。使s连向全部的正权点,边权为点权。使全部负权点连向t,边权为点权的绝对值。若要选x必须先选y,连一条由x到y的边,边权是INF。最大点权和=正权点和-最小割。
(3)输出最大权闭合子图:
最大权闭合子图的问题能够转化为求解最小割的问题,咱们所求的闭合子图是最小割产生的两个子图中,与源点链接的那个子图。最大权闭合子图的题目很特殊,它的最小割的边都是与源点或者汇点直接相连,若是答案的方法是惟一的话,那么最小割应该也是惟一的(我的猜想),这样的话在dinic以后从源点开始遍历与源点仍然链接的点,这些点都是最大权闭合子图中的点。
DAG最小路径覆盖:
(1)定义:
在一个有向无环图中,找出最少的路径,使得这些路径通过了全部的点,且这些路径之间不会通过相同的点。
(2)求最小路径覆盖:
把原图的每一个点V拆成Vx和Vy两个点,若是有一条有向边A->B,那么就加边Ax−>By。这样就获得了一个二分图。那么最小路径覆盖=原图的结点数-新图的最大匹配数。
证实:
一开始每一个点都是独立的为一条路径,总共有n条不相交路径。咱们每次在二分图里找一条匹配边就至关于把两条路径合成了一条路径,也就至关于路径数减小了1。因此找到了几条匹配边,路径数就减小了多少。因此有最小路径覆盖=原图的结点数-新图的最大匹配数。由于路径之间不能有公共点,因此加的边之间也不能有公共点,这就是匹配的定义。
(3)输出每条路径上的点:
考虑咱们是如何求最小路径覆盖的,咱们一开始认为路径集合就是点集,而后找到一个匹配边,把这个边的两个点所在的集合合并成一个集合(其实就是把两条路径合并成一条路径)。若是最大匹配是用最大流写的,则最后判断某两个点是否在一条路径上,就直接判断它们的反向边是否有流量(注意这里的两个点并非任意的两个点,而是一条路径上相邻的两个点)。这样按照某种顺序就能够按顺序输出每条边上的点。
(1)定义:
在二分图最大匹配中,每一个点(不论是X点仍是Y点)最多只能和一条匹配边相关联,然而,咱们常常遇到这种问题,即二分图匹配中一个点能够和多条匹配边相关联,但有上限,或者说,Li表示点i最多能够和多少条匹配边相关联。
二分图多重匹配分为二分图多重最大匹配与二分图多重最优匹配两种,分别能够用最大流与最大费用最大流解决。
(2)二分图多重最大匹配:
在原图上创建源点S和汇点T,S向每一个X点连一条容量为该X点L值的边,每一个Y点向T连一条容量为该Y点L值的边,原来二分图中各边在新的网络中仍存在,容量为1(若该边可使用屡次则容量大于1),求该网络的最大流,就是该二分图多重最大匹配的值。
(3)二分图多重最优匹配:
在原图上创建源点S和汇点T,S向每一个X点连一条容量为该X点L值、费用为0的边,每一个Y点向T连一条容量为该Y点L值、费用为0的边,原来二分图中各边在新的网络中仍存在,容量为1(若该边可使用屡次则容量大于1),费用为该边的权值。求该网络的最大费用最大流,就是该二分图多重最优匹配的值。
(1)定义:
最小点覆盖要求选最少的点让二分图中的每条边都至少和其中一个点关联。能够证实:最少的点数(即覆盖数)=最大匹配数。
(2)求出最小点覆盖集:
将二分图点集分为左右两个点集,标记右边未匹配边的顶点,并从右边未匹配边的顶点出发,按照边:未匹配->匹配->未匹配...,的原则标记途中通过的顶点,则最后一条通过的边一定为匹配边。重复上述过程,直到右边再也不含有未匹配边的点。记获得的左边已标记的点和右边未标记的点为S, S即为所求的最小顶点集。
证实参考:
http://www.matrix67.com/blog/archives/116
http://www.javashuo.com/article/p-hyxriozy-hv.html
(3)二分图最大点独立集
最大点独立集=总点数-最小点覆盖集。
证实参考:
https://blog.csdn.net/Techmonster/article/details/50011363
(4)二分图最小边覆盖
最小边覆盖 = 最大点独立集 = 总点数 - 二分图最大匹配。
二分图最小点权覆盖:
(1)定义:
对于有点权的二分图,选出权值和最小的点的集合覆盖全部的边。
(2)求最小点权覆盖:
创建源点S,汇点T,源汇点分别与原二分图的各部分连边,容量为点权,原来二分图中的边保持不变,并将其容量改成INF。则此图的最小割就是最小点权覆盖。
且最小割中的边对应的点,就是最小点权覆盖集中的点。
(3)二分图最大点权独立集:
二分图点权最大独立集=二分图点权和-二分图最小点权覆盖集。