Pagini recente » Cod sursa (job #2576546) | Cod sursa (job #408518) | Cod sursa (job #264858) | Cod sursa (job #2438302) | Cod sursa (job #713282)
Cod sursa(job #713282)
#include<stdio.h>
const int inf=1000000;
int n,m,flux,c[1001][1001],t[1001],s[1001];
void citire()
{ int i,x,y,z;
freopen("maxflow.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{ scanf("%d%d%d",&x,&y,&z);
c[x][y]=z;
}
fclose(stdin);
}
int BF()
{ int p=1,u=1,i;
s[p]=1;
while(p<=u)
{ for(i=1;i<=n;i++)
if(!t[i]&&c[s[p]][i]&&i!=1)
{ u++;
s[u]=i;
t[i]=s[p];
}
p++;
}
if(t[n]) return 1;
else return 0;
}
int main()
{ freopen("maxflow.out","w",stdout);
int i,fmin,x;
citire();
while(BF())
{ for(i=1;i<=n;i++)
{ if(t[i]<=0||c[i][n]<=0) continue;
fmin=c[i][n];
x=i;
while(t[x])
{ if(c[t[x]][x]<fmin) fmin=c[t[x]][x];
x=t[x];
}
x=i;
flux+=fmin;
c[i][n]-=fmin;
c[n][i]+=fmin;
while(t[x])
{ c[t[x]][x]-=fmin;
c[x][t[x]]+=fmin;
x=t[x];
}
}
for(i=1;i<=n;i++)
t[i]=0;
}
printf("%d",flux);
fclose(stdout);
return 0;
}