Pagini recente » Cod sursa (job #2838975) | Cod sursa (job #2932779) | Cod sursa (job #2984312) | Cod sursa (job #361722) | Cod sursa (job #276505)
Cod sursa(job #276505)
#include <stdio.h>
#include <string.h>
#define NMAX 1001
#define INF 200000
int n, m, s, d, flux, c[NMAX][NMAX], f[NMAX][NMAX], t[NMAX];
int minim(int a, int b)
{
return a < b ? a : b;
}
int BFS(int s, int d)
{
int p, u, nod, i, q[NMAX];
memset(t, 0, sizeof(t));
p = u = 0;
q[p] = s;
t[s] = -1;
while ( p <= u)
{
nod = q[p];
for ( i = 1; i <= n; i++)
if ( !t[i] && c[nod][i] - f[nod][i] > 0 )
{
u++;
q[u] = i;
t[i] = nod;
if ( i == d)
return 1;
}
p++;
}
return 0;
}
void flux_maxim()
{
int i, cr;
for ( flux = 0; BFS(s, d); flux +=cr)
{
cr = INF;
i = d;
while ( i != s)
{
cr = minim( cr, c[t[i]][i] - f[t[i]][i]);
i = t[i];
}
i = d;
while ( i != s)
{
f[t[i]][i] += cr;
f[i][t[i]] -= cr;
i = t[i];
}
}
printf("%d\n", flux);
}
int main()
{
int i, x, y, ca;
freopen("flux.in", "r", stdin);
freopen("flux.out", "w", stdout);
scanf("%d %d", &n, &m);
for ( i = 1; i <= m; i++)
{
scanf("%d %d %d", &x, &y, &ca);
c[x][y] = ca;
}
s = 1;
d = n;
flux_maxim();
return 0;
}