标签:
推荐一个学习网络流入门的资料 http://acm.pku.edu.cn/summerschool/gw_netflow.pdf
本题为网络流水题,也是pdf中将网络流的一道题,注意重边即可。
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <cstdlib> using namespace std; int n,m; long long g[250][250]; int vis[250]; int pre[250]; long long Augmented() { memset(vis,0,sizeof(vis)); memset(pre,0,sizeof(pre)); queue<int> que; while(!que.empty()){ que.pop(); } que.push(1); vis[1]=1; bool flag=false; while(!que.empty()){ int d=que.front(); que.pop(); for(int i=1;i<=m;i++){ if(g[d][i]>0 && !vis[i]){ pre[i]=d; vis[i]=1; if(i==m){ flag=true; while(!que.empty()){ que.pop(); } break; } else{ que.push(i); } } } } if(flag){ long long Min= 999999999; int d=m; while(pre[d]){ Min=min(Min,g[pre[d]][d]); d=pre[d]; } d=m; while(pre[d]){ g[pre[d]][d]-=Min; g[d][pre[d]]+=Min; d=pre[d]; } return Min; } return 0; } int main() { while(~scanf("%d%d",&n,&m)){ memset(g,0,sizeof(g)); for(int i=0;i<n;i++){ int u,v; long long w; scanf("%d%d%lld",&u,&v,&w); g[u][v]+=w; } long long flow; long long maxflow=0; while(flow=Augmented()){ maxflow+=flow; } printf("%lld\n",maxflow); } return 0; }
标签:
原文地址:http://www.cnblogs.com/Scale-the-heights/p/4374879.html