Pagini recente » Cod sursa (job #545835) | Cod sursa (job #1415971) | Cod sursa (job #321306) | Cod sursa (job #2246018) | Cod sursa (job #247733)
Cod sursa(job #247733)
#include<stdio.h>
#include<string.h>
#define NMAX 1002
int F[NMAX][NMAX];
int C[NMAX][NMAX];
int T[NMAX],n,m,flow;
int Q[NMAX];
inline int min(int a,int b){ return (a<b?a:b); }
int BFS(){
int f=0,u=0,j,nod;
memset(T,0,sizeof(T));
memset(Q,0,sizeof(Q));
Q[++u] = 1;T[1]=-1;
for(f=0;f<=u;){nod=Q[++f];
for(j=1;j<=n;j++){
if(!T[j] && C[nod][j]>F[nod][j]){
Q[++u]=j;
T[j]=nod;
if(j==n) return 1;
}
}
}return 0;
}
void max_flow(){
int i,rez,j;
for(;BFS();){
for(i=1;i<=n;i++){
if(C[i][n]<=F[i][n] || T[i]<0) continue;
rez=C[i][n]-F[i][n];
for(j=i;j!=1;j=T[j]) rez=min(rez,C[T[j]][j] - F[T[j]][j]);
if(!rez) continue;
F[i][n]+=rez;F[n][i]-=rez;
for(j=i;j!=1;j=T[j]) {F[T[j]][j]+=rez;F[j][T[j]]-=rez;}
flow+=rez;
}
}
}
int main(){
freopen("maxflow.out","w",stdout);
freopen("maxflow.in","r",stdin);
int i,x,y,c;
scanf("%d%d",&n,&m);
for(i=0;i<=m;++i) {scanf("%d%d%d",&x,&y,&c);C[x][y]=c;}
max_flow();
printf("%d",flow);
return 0;
}