Pagini recente » Cod sursa (job #3042) | Cod sursa (job #3275215) | preONI 2005 (Runda 1) | Cod sursa (job #132552) | Cod sursa (job #262451)
Cod sursa(job #262451)
#include <stdio.h>
#include <string.h>
#define Nmax 1024
int f[Nmax][Nmax], c[Nmax][Nmax];
int t[Nmax], v[Nmax], n,m,s,d;
int q[Nmax];
int BF()
{
int st=0,dr=1,nod;
q[1] = 1;
memset(v,0,sizeof(v));
memset(t,0,sizeof(t));
v[1] = 1;
while (st < dr)
{
nod = q[++st];
for (int i=1;i<=n;++i) if (c[nod][i]>f[nod][i] && v[i] == 0)
{
v[i] = 1;
t[i] = nod;
q[++dr] = i;
}
}
return v[n];
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d", &n,&m);
int x,y,C,r,flux=0;
while (m--)
{
scanf("%d%d%d", &x,&y,&C);
c[x][y] = C;
}
while (BF())
{
for (int j=1;j<=n;++j) if (c[j][n] > f[j][n] && v[j] == 1)
{
r = 111111;
for (int i=j;i!=1;i=t[i])
if (c[t[i]][i] - f[t[i]][i] < r)
r = c[t[i]][i] - f[t[i]][i];
if (r > 0)
for (int i=j;i!=1;i=t[i])
f[t[i]][i] += r,
f[i][t[i]] -= r;
flux += r;
}
}
printf("%d\n", flux);
return 0;
}