最樸素的求最大流的演算法。
做法:不停的尋找增廣路,直到找不到為止
**如下:
@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增廣路演算法的時間複雜度為...