首页 > 代码库 > HDU3549:Flow Problem(最大流入门EK)
HDU3549:Flow Problem(最大流入门EK)
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <queue>#include <math.h>#define inf 0x3f3f3f3fusing namespace std;int map[50][50],v[50],pre[1000];int n,m;int bfs(int s,int t){ memset(v,0,sizeof(v)); memset(pre,-1,sizeof(pre)); pre[s]=s; queue<int>q; q.push(s); v[s]=1; while(!q.empty()) { int tt=q.front(); q.pop(); for(int i=1; i<=n; i++) { if(map[tt][i]&&v[i]==0) { v[i]=1; pre[i]=tt; q.push(i); if(i==t) { return 1; } } } } return 0;}int EK(int s,int t){ int ans=0; while(bfs(s,t)==1) { int min1=inf; for(int i=t; i!=s; i=pre[i]) { if(min1>map[pre[i]][i]) { min1=map[pre[i]][i]; } } for(int i=t; i!=s; i=pre[i]) { map[pre[i]][i]-=min1; map[i][pre[i]]+=min1; } ans+=min1; } return ans;}int main(){ int T,x,y,z; scanf("%d",&T); for(int i=1; i<=T; i++) { scanf("%d%d",&n,&m); memset(map,0,sizeof(map)); while(m--) { scanf("%d%d%d",&x,&y,&z); map[x][y]+=z; } printf("Case %d: %d\n",i,EK(1,n)); EK(1,n); } return 0;}
HDU3549:Flow Problem(最大流入门EK)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。