Pagini recente » Cod sursa (job #1106582) | Cod sursa (job #2610620) | Cod sursa (job #2561347) | Cod sursa (job #742122) | Cod sursa (job #608855)
Cod sursa(job #608855)
#include<stdio.h>
#include<math.h>
#include<string.h>
int c[1002][1002],t[1002],n,m,f[1002][1002],plecare,final,i,u,flux,r,nu,q[100],x,y,z;
inline int bf(){
memset(t,0,sizeof(t));
plecare=1;
final=1;
q[1]=1;
t[1]=-1;
while (plecare<=final){
x=q[plecare];
for (i=1; i<=n; i++)
if (c[x][i]>f[x][i] && t[i]==0 && i!=x){
final++;
q[final]=i;
t[i]=x;
if (i==n) return (1);
}
plecare++;
}
return(0);
}
int main(){
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d",&n,&m);
memset(c,0,sizeof(c));
memset(f,0,sizeof(f));
for (i=1; i<=m; i++){
scanf("%d %d %d",&x,&y,&z);
c[x][y]=z;
}
while (bf()!=0){
r=20000000;
i=n;
while (i!=1){
nu=c[t[i]][i]-f[t[i]][i];
if (r>nu) r=nu;
i=t[i];
}
i=n;
while (i!=1){
f[t[i]][i]=f[t[i]][i]+r;
f[i][t[i]]=f[i][t[i]]-r;
i=t[i];
}
flux=flux+r;
}
printf("%d\n",flux);
return(0);
}