最大流EK和Dinic演算法

2021-07-02 19:38:48 字數 1257 閱讀 1093

最樸素的求最大流的演算法。

做法:不停的尋找增廣路,直到找不到為止

**如下:

@frosero

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

int n,m;

int cap[202][202],flow[202][202],mf[202],pre[202];

//cap為網路的容量 flow為現在的流量

//mf[i]為原點到點i的最大流量 pre[i]為增廣路上i點上乙個點

int ek(int s,int t)

}if(mf[t] == 0) break;

ans += mf[t];

for(int i=t;i!=s;i=pre[i])

}return ans;

}int main()

printf("%d\n",ek(1,m));

}}

dinic的優化部分就是給殘留網路生成乙個層次圖,然後盡量的利用層次圖後再形成新的層次圖。

理論上dinic和ek演算法的時間複雜度差不多,但是事實上dinic演算法要好得多。

**如下:

@frosero

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

int n,m,flow[202][202],cap[202][202];

int dis[202];

//flow為現在的流量 cap為網路的容量

//dis為點的層次

bool bfs()

}if(dis[m] == -1) return

false;

else

return

true;

}int dfs(int s = 1,int f = inf)

return ans;

}int dinic()

return ans;

}int main()

printf("%d\n",dinic());

}return

0;}

模板 EK求最大流 dinic求最大流

acm模板 yxc老師的部分總結 基本概念 1.1 流網路,不考慮反向邊 1.2 可行流,不考慮反向邊 1.2.1 兩個條件 容量限制 流量守恆 1.2.2 可行流的流量指從源點流出的流量 流入源點的流量 1.2.3 最大流是指最大可行流 1.3 殘留網路,考慮反向邊,殘留網路的可行流f 原圖的可行...

最大流 EK演算法

ek演算法。特別暴力 時間複雜度o v e 2 所以競賽中我們一般用效率更高的dinic演算法 ek演算法核心就是殘量網路圖,殘量指的就是每條路上剩餘的流量。不難發現,只要能在殘量網路圖上找到一條從源點到匯點的路,就能在這一條路上加流量,所加的流量就是在這條路徑上每條邊殘量取個min,一點一點的加就...

最大流 EK演算法

ek演算法是求最大流的一種容易實現 易懂的演算法。ek演算法仍然是乙個基於增廣路的演算法,思路非常簡單。每次從s嘗試找到一條到達t的路徑,路徑上最小的殘留量大於0,那麼我們就可以把這條路上的最小殘留量減去,累加到ans裡。繼續bfs直到找不到位置,此時ans就是最大流。ek增廣路演算法的時間複雜度為...