Pagini recente » Cod sursa (job #2299197) | Cod sursa (job #2968067) | Cod sursa (job #1053783) | Cod sursa (job #2894101) | Cod sursa (job #279154)
Cod sursa(job #279154)
#include<stdio.h>
#include<string.h>
FILE *f=fopen("maxflow.in","r");
FILE *g=fopen("maxflow.out","w");
int C[1001][1001];
int F[1001][1001];
int Q[10000],T[1001];
int n,m;
int BFS(){
memset(T,-1,sizeof(T));
memset(Q,0,sizeof(Q));
int p,u,x,i;
Q[u=1]=1;
T[1]=-1;
p=0;
while(p<=u){
x = Q[++u];
for(i=1;i<=n;i++){
if(C[x][i] && C[x][i]>F[x][i] && T[i]==-1){
Q[++u]=i;
T[i]=x;
if(i==n) return 1;
}
}
}
return 0;
}
int MIN(int a,int b){ return(a>b?b:a);}
int flux(){
int flow=0,i;
while(BFS()){
for(i=1;i<n;i++){
if(!C[i][n] || C[i][n]<=F[i][n] && T[i]==-1)continue;
T[n]=i;
int min = 1<<30;
int x;
for (x=n;x>1;x=T[x])min=MIN(min,C[T[x]][x]-F[T[x]][x]);
if(!min) continue;
for(x=n;x>1;x=T[x]){F[T[x]][x]+=min;F[x][T[x]]-=min;}
flow+=min;
}
}
return flow;
}
void date(){
int x,y,c;
fscanf(f,"%d%d",&n,&m);
for(;m--;){
fscanf(f,"%d%d%d",&x,&y,&c);
C[x][y]=c;
}
}
int main(){
date();
fprintf(g,"%d",flux());
return 0;
}