Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
代码在这儿,c++RE,g++ac。不知为何In Reply To:晕,代码没传上来。我自己再改一下。 Posted by:tengshengbo at 2005-08-09 13:18:54 #include <iostream> #include <cstdio> using namespace std; typedef int Graph[200][200]; typedef int Path[200]; Graph map,flow; int n,s,t; int EK() { int i, j, k=0, c, head, tail; Graph R; Path prev, visit, Q; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { flow[i][j] = 0; R[i][j] = map[i][j]; } } while (true) { head = tail = 0; memset(visit, false, sizeof(visit)); Q[tail++] = s; prev[s] = -1; visit[s] = 1; while (head < tail) { k = Q[head++]; for (i = 0; i < n; i++) { if (!visit[i] && R[k][i] > 0) { visit[i] = 1; prev[i] = k; if (i == t) break; if(tail>=0) Q[tail++] = i; } } if(i==t) break; } if (!visit[t]) break; c = 1000000; j = t; while (j != s) { i = prev[j]; if(c>R[i][j]) c=R[i][j]; j = i; } j = t; while (j != s) { i = prev[j]; flow[i][j] = flow[i][j] + c; flow[j][i] = -flow[i][j]; R[i][j] = map[i][j] - flow[i][j]; R[j][i] = map[j][i] - flow[j][i]; j = i; } } c = 0; for (i = 0; i < n; i++) { c += flow[s][i]; } return c; } int main() { while(scanf("%d",&n)) { n=n+2; int i,j; memset(map,0,sizeof(map)); s=n-2; t=n-1; int np,nc,m; scanf("%d%d%d",&np,&nc,&m); int u,v,z; char c[52]; for(i=0;i<m;i++) { memset(c,0,sizeof(c)); scanf("%s",&c); j=1; u=0; v=0; z=0; while(c[j]!=',') { u=u*10+c[j]-'0'; j++; } j++; while(c[j]!=')') { v=v*10+c[j++]-'0'; } j++; while(c[j]!=0) z=z*10+c[j++]-'0'; if(u!=v) { map[u][v]=z; } //cout<<u<<" "<<v<<" "<<z<<endl; } for(i=0;i<np;i++) { memset(c,0,sizeof(c)); scanf("%s",&c); j=1; u=0; z=0; while(c[j]!=')') { u=u*10+c[j]-'0'; j++; } j++; while(c[j]!=0) { z=z*10+c[j]-'0'; j++; } map[s][u]=z; // cout<<s<<" "<<u<<" "<<z<<endl; } for(i=0;i<nc;i++) { memset(c,0,sizeof(c)); scanf("%s",&c); j=1; u=0; z=0; while(c[j]!=')') u=u*10+c[j++]-'0'; j++; while(j<strlen(c)) z=z*10+c[j++]-'0'; map[u][t]=z; // cout<<u<<" "<<t<<" "<<z<<endl; } int result=EK(); cout<<result<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator