Pagini recente » Cod sursa (job #2985171) | Cod sursa (job #1038905) | Cod sursa (job #2652910) | Cod sursa (job #590518) | Cod sursa (job #420763)
Cod sursa(job #420763)
#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,v[1001],k;
int bf()
{ u=p=1; c[1]=1; viz[1]=ind; k=0;
while(p<=u)
{ for(i=1;i<=n;i++) if(a[c[p]][i]&&viz[i]!=ind)
if(i!=n) { u++; c[u]=i; viz[i]=ind; parinte[i]=c[p]; }
else {k++; v[k]=c[p]; }
p++;
}
return k;
}
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())
{ for(i=1;i<=k;i++) { parinte[n]=v[i];
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;
}