http://acm.hust.edu.cn/vjudge/contest/view.action?cid=31317#overview
#include <iostream> #include <queue> #include <algorithm> #include <string.h> using namespace std; const int msize=250; int N,M; int r[msize][msize]; int pre[msize]; bool vis[msize]; bool BFS(int s,int t) { queue<int>que; memset(pre,-1,sizeof(pre)); memset(vis,false,sizeof(vis)); pre[s]=s; vis[s]=true; que.push(s); int p; while(!que.empty()) { p=que.front(); que.pop(); for(int i=1;i<=M;i++) { if(r[p][i]>0&&!vis[i]) { pre[i]=p; vis[i]=true; if(i==t) return true; que.push(i); } } } return false; } int EK(int s,int t) { int maxflow=0; int d; while(BFS(s,t)) { d=0x7fffffff; for(int i=t;i!=s;i=pre[i]) d=min(d,r[pre[i]][i]); for(int i=t;i!=s;i=pre[i]) { r[pre[i]][i]-=d; r[i][pre[i]]+=d; } maxflow+=d; } return maxflow; } int main() { while(cin>>N>>M) { memset(r,0,sizeof(r)); int s,e,c; for(int i=0;i<N;i++) { cin>>s>>e>>c; r[s][e]+=c; } cout<<EK(1,M)<<endl; } return 0; }
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <queue> using namespace std; const int maxsize=110; int n,np,nc,m; int graph[maxsize][maxsize]; int pre[maxsize]; bool vis[maxsize]; int power; char temp[20]; int u,v,z; bool BFS(int s,int t) { memset(pre,-1,sizeof(pre)); memset(vis,false,sizeof(vis)); queue<int>Q; Q.push(s); pre[s]=s; vis[s]=true; int p; while(!Q.empty()) { p=Q.front(); Q.pop(); for(int i=0;i<=n+1;i++) { if(graph[p][i]>0&&!vis[i]) { vis[i]=true; pre[i]=p; if(i==t) return true; Q.push(i); } } } return false; } int EK(int s,int t) { int maxflow=0; int delta; while(BFS(s,t)) { delta=0x7fffffff; for(int i=t;i!=s;i=pre[i]) delta=min(delta,graph[pre[i]][i]); for(int i=t;i!=s;i=pre[i]) { graph[pre[i]][i]-=delta; graph[i][pre[i]]+=delta; } maxflow+=delta; } return maxflow; } int main() { while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF) { memset(graph,0,sizeof(graph)); power=0; for(int i=0;i<m;i++) { scanf("%s",temp); sscanf(temp,"(%d,%d)%d",&u,&v,&z); graph[u+1][v+1]+=z; } for(int i=0;i<np;i++) { scanf("%s",temp); sscanf(temp,"(%d)%d",&u,&z); graph[0][u+1]=z; power+=z; } for(int i=0;i<nc;i++) { scanf("%s",temp); sscanf(temp,"(%d)%d",&u,&z); graph[u+1][n+1]=z; } cout<<EK(0,n+1)<<endl; } return 0; }