标签:
Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 10184 Accepted Submission(s): 4798
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<queue> using namespace std; int dp[100][100],pre[100]; const int tmin=999999999; int maxflow; void EK(int start,int end,int n){ while(1){ queue<int>q; q.push(1); int minflow=tmin; memset(pre,0,sizeof(pre)); while(!q.empty()){ int u=q.front(); q.pop(); for(int i=1;i<=n;i++){ if(dp[u][i]>0&&!pre[i]){ pre[i]=u; q.push(i); } } } if(pre[end]==0) break; for(int i=end;i!=start;i=pre[i]){ minflow=min(dp[pre[i]][i],minflow); } for(int i=end;i!=start;i=pre[i]){ dp[pre[i]][i]-=minflow; dp[i][pre[i]]+=minflow; } maxflow+=minflow; } } int main(){ int count=0; int n,m; int t; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); memset(dp,0,sizeof(dp)); memset(pre,0,sizeof(pre)); count++; int u,v,w; for(int i=1;i<=m;i++){ scanf("%d%d%d",&u,&v,&w); dp[u][v]+=w; } maxflow=0; EK(1,n,n); printf("Case %d: %d\n",count,maxflow); } return 0; }
HDU 3549 基础网络流EK算法 Flow Problem
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/4679477.html