其实网络流很久之前已经学过,但是因为一些原因搁置了很久,于是想再系统地复习一下. 由于博主能力有限,所以关于网络流知识也是了解个大概,这里只是简单介绍,并且说一下博主的 感性理解 最大流 EK増广路算法 很容易理解的一个算法,也就是我们不断地bfs找出一条増广路然后更新剩余容量,直到更新完毕,类似于SPFA做法.时间复杂度$O(nm^{2})$; 这里不再附上代码,因为后面的费用流就要用EK+SPFA,而只是求最大流,推荐Dinic. Dinic算法 与EK不同的是,Dinic算法增加了一些优化,这里引进了深度这个概念,通过在同一深度图中増广,一个点可以向多个点进行多流増广,并有减枝; 于是Dinic就可以达到$O(n^{2}m)$的优秀时间复杂度,可以代替匈牙利算法跑二分图匹配,时间复杂度$O(n\sqrt{n})$; PS:关于二分图匹配时间复杂度可以这么想,由于一个点多流推进,同时増广多个点,而且深度小,所以时间复杂度就十分优秀; Code: #include<bits/stdc++.h> #define maxn 10008 using namespace std; int n,m,head[maxn],s,t,cent=1,d[maxn],maxflow; int min(int a,int b)