Pagini recente » Cod sursa (job #2344089) | Cod sursa (job #1057429) | Cod sursa (job #2635866) | Cod sursa (job #1085952) | Cod sursa (job #420741)
Cod sursa(job #420741)
#include<stdio.h>
FILE *f,*g;
long a[1001][1001],c[1001],i,n,m,x,y,z,min,parinte[1001],flux,u,p,viz[1001],ind;
int bf()
{ u=p=1; c[1]=1; viz[1]=ind;
while(p<=u)
{ for(i=1;i<=n;i++) if(a[c[p]][i]&&viz[i]!=ind) { u++; c[u]=i; viz[i]=ind; parinte[i]=c[p]; }
p++;
}
return parinte[n];
}
int main()
{ f=fopen("maxflow.in","r"); g=fopen("maxflow.out","w");
fscanf(f,"%ld%ld",&n,&m);
for(i=1;i<=m;i++) { fscanf(f,"%ld%ld%ld",&x,&y,&z); a[x][y]=z; }
ind=1;
while(bf())
{ x=n; min=1000000;
while(x!=1)
{ if(a[parinte[x]][x]<min) min=a[parinte[x]][x];
x=parinte[x];
}
x=n;
while(x!=1)
{ a[parinte[x]][x]-=min; a[x][parinte[x]]+=min;
x=parinte[x];
}
flux+=min; ind++; parinte[n]=0;
}
fprintf(g,"%ld",flux);
fclose(g);
return 0;
}