网络流入门

WannaflyCamp day1 :知识盲区就是致命弱点


基本知识点

源点(s):只出不进的点
汇点(t):只进不出的点


最大流算法

Edmonds-Karp算法

思想

不断的找BFS增广路,直至不能增广就找到最大流

实现

通过BFS,找出残量网络中的流量,一旦到达终点t立马弹出,通过反向边和BFS记录的路径,修改残量网络的流量,每次用BFS增广保证了路径是最优(即不会出现反悔)

时间复杂度

理论最坏是$(n·m^2)$,但实际上不是很慢


Dinic算法

思想

利用BFS不断求分层图,DFS不断增光求最大流


最大流最小割定理

内容

最大流=最小割

证明


最小费用最大流

概述

在最大流的基础上给每条边加上单位流量的费用cost,在最大流的基础上求最小费用

思想

只要初始流是该流量下的最小费用可行流,每次增广后的新流都是新流量下的最小费用流。

类似Edmonds-Karp算法

但每次用Bellman-Ford算法找增广路而非BFS
思想:对每个点类似的求一个最短路

POJ2135

思路

转化成网络流模型,建立源点s,汇点t。
对于s,s到1建立流量为2,费用为0的边。
对于t,建立n到t流量为2,费用为0的边。
跑最小费用最大流即可

Wannafly day1 Birthday

注意要将费用建在每个区域和t之间才是正确的


最大匹配


二分图最大匹配

概述

注意二分图是不含有奇环的

匈牙利算法

解决二分图最大匹配
邻接表存图的时间复杂度$O(n·m)$


一般图最大匹配

带花树

留坑


最大权完备匹配

概述

即每个点都匹配到

KM算法

权值为正,正常KM
KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相反数即可。
KM算法的运行要求是必须存在一个完备匹配,如果求一个最大权匹配(不一定完备)该如何办?依然很简单,把不存在的边权值赋为0。


最小权完美匹配

概述

即每个点都匹配到

KM算法

权值取反
KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相反数即可。
KM算法的运行要求是必须存在一个完备匹配,如果求一个最大权匹配(不一定完备)该如何办?依然很简单,把不存在的边权值赋为0。

最大权匹配

概述

最大权和即可

KM算法

权值为正,不存在的边赋值为0
KM算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简单,只需将所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相反数即可。
KM算法的运行要求是必须存在一个完备匹配,如果求一个最大权匹配(不一定完备)该如何办?依然很简单,把不存在的边权值赋为0。


最小权匹配

KM算法

权值取反,不存在的边赋值为0


一般图最大权匹配

带花树

留坑