网络流专题

求最大流:

       求最大流的过程,就是不断找到一条源到汇的路径,然后构建残余网络,再在残余网络上寻找新的路径,使总流量增加,然后形成新的残余网络,再寻找新路径…..直到某个残余网络上找不到从源到汇的路径为止,最大流就算出来了。重要的一点就是建立反向边。

Edmonds-Karp 最短增广路算法:

      先用BFS找到从源点到汇点的最短可行路径,并记录每个点的前驱点和路径上最小的流量值,然后反向从汇点到源点的边把最小流量值减去的同时加上反向边,不断这样找,直到找不到路时就结束,把所求的最小流量值加起来就得到最大流。

Dinic 快速网络流算法:

先利用BFS对残余网络分层,分完层后,从源点开始,用DFS从前一层向后一层反复寻找增广路(即要求DFS的每一步都必须要走到下一层的节点),复杂度为O(n^2m)。

有源上下界网络最大流:

      先对原图把所有下界通过两个超级汇点st-ed替换,原图的流量就是上界-下界,然后加上一条流量无穷大的t-s边,求出最大流,求出s汇点的流出的量记录为sum1并检查超级汇点的流量是否流满,如果满流,就满足下界的条件,然后把超级汇点、所连的边和无穷大的t-s的边删除,然后再求一次s-t的最大流,记录为sum2,最后满足条件的最大流就是sum1+sum2;如果不满足,就不能求出满足题意的最大流。

你可能感兴趣的:(网络流专题)