Cod sursa(job #238889)
#include <stdio.h>
#include <string.h>
#define Nmax 1024
int c[Nmax][Nmax], f[Nmax][Nmax];
int q[Nmax], t[Nmax], l[Nmax],n,m;
int bfs()
{
memset(q,0,sizeof(q));
memset(t,0,sizeof(t));
q[1] = 1; t[1] = 1;
int st=0, dr=1, nod;
while(st<dr)
{
nod = q[++st];
for (int i=1;i<=n;++i) if (t[i] == 0)
if (f[nod][i] < c[nod][i])
{
t[i] = nod;
q[++dr] = i;
}
}
if (t[n] == 0) return 0;
return 1;
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d", &n,&m);
int x,y,z, flow=0;
for (int i=1;i<=m;++i)
{
scanf("%d%d%d", &x,&y,&z);
c[x][y] = z;
}
while (bfs())
{
int add = 123456789;
for (int nod = n;nod!=1;nod=t[nod])
if (c[t[nod]][nod] < add) add = c[t[nod]][nod];
for (int nod = n;nod!=1;nod=t[nod])
{
f[t[nod]][nod] += add;
f[nod][t[nod]] -= add;
}
flow += add;
}
printf("%d\n", flow);
return 0;
}