首页 > 代码库 > 最大流模板
最大流模板
#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;int pre[500],flow[500][500],dis[500];int map[500][500];int maxflow;int n,m;int ek(int begin ,int end){ int i,x; maxflow=0; queue<int>p; while(!p.empty()) { p.pop(); } memset(flow,0,sizeof(flow)); while(1) { memset(dis,0,sizeof(dis)); dis[begin]=9999999; p.push(begin); while(!p.empty()) { x=p.front(); p.pop(); for(i=1; i<=m; i++) { if(map[x][i]>flow[x][i]&&!dis[i]) { p.push(i); pre[i]=x; dis[i]=min(dis[x],map[x][i]-flow[x][i]); } } } if(dis[end]==0) { return maxflow; } for(i=end; i!=begin; i=pre[i]) { flow[pre[i]][i]+=dis[end]; flow[i][pre[i]]-=dis[end]; } maxflow+=dis[end]; }}int main(){ int i,u,v,w; while(scanf("%d%d",&n,&m)!=EOF) { memset(map,0,sizeof(map)); memset(pre,0,sizeof(pre)); for(i=1; i<=n; i++) { scanf("%d%d%d",&u,&v,&w); map[u][v]+=w; } printf("%d\n",ek(1,m)); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。