模板最大流之Ford-Fulkerson算法
Posted nhc2014
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板最大流之Ford-Fulkerson算法相关的知识,希望对你有一定的参考价值。
这个好像跟EK算法的本质差不多,不过一个dfs,一个bfs,总体看来一般用bfs会好一点。
程序:
#include<iostream> #include<cstdio> #include<vector> #include<cstring> using namespace std; struct edge{ int from,to,cap,flow,nod; }; vector<edge>g[20000]; int s,t; bool vis[20000]; void add(int u,int v,int w) { g[u].push_back((edge){u,v,w,0,g[v].size()}); g[v].push_back((edge){v,u,0,0,g[u].size()-1}); } int dfs(int now,int maxx) { if (now==t) return maxx; vis[now]=true; for (int i=0;i<g[now].size();i++) { edge e=g[now][i]; if ((!vis[e.to])&&(e.cap>e.flow)) { int d=dfs(e.to,min(maxx,e.cap-e.flow)); if (d>0) { e.flow+=d; g[now][i]=e; g[e.to][e.nod].flow-=d; return d; } } } return 0; } int main() { int m,a,b,c,n; scanf("%d%d%d%d",&n,&m,&s,&t); for (int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); } int ans=0; for (;;) { memset(vis,0,sizeof vis); int sum=dfs(s,210000000); if (sum==0) break; ans+=sum; } printf("%d\n",ans); return 0; }
以上是关于模板最大流之Ford-Fulkerson算法的主要内容,如果未能解决你的问题,请参考以下文章