Pagini recente » Cod sursa (job #2936541) | Cod sursa (job #1220644) | Cod sursa (job #2288776) | Cod sursa (job #523346) | Cod sursa (job #768328)
Cod sursa(job #768328)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max_n 1001
FILE *in, *out;
int c[max_n][max_n], f[max_n][max_n], t[max_n], n, m, flux;
int bf(int s,int d)
{
int li, ls, nod, q[max_n], i;
memset(t,0,sizeof(t));
for(li=0, ls=0, t[s]=-1, q[0]=s; li<=ls; li++)
{
nod = q[li];
for(i = 1; i<=n; i++)
if(!t[i] && c[nod][i] > f[nod][i])
{
q[++ls] = i;
t[i] = nod;
if(i == d) return 1;
}
}
return 0;
}
int main()
{
int i, j, r, x, y, z, s, d;
in = fopen("maxflow.in", "r");
out = fopen("maxflow.out", "w");
fscanf(in, "%d %d", &n, &m);
for(i=1; i<=m; i++)
{
fscanf(in, "%d %d %d", &x, &y, &z);
c[x][y]=z;
}
s = 1;
d = n;
for(flux = 0; bf(s,d);)
for(j = 1; j <= n; ++j)
{
if(j == s || c[j][d] <= f[j][d]) continue;
r = c[j][d] - f[j][d];
for(i = j; t[i] != -1 && i; i = t[i])
if(r > c[t[i]][i]-f[t[i]][i])
r = c[t[i]][i]-f[t[i]][i];
if(!r) continue;
f[j][d] += r;
f[d][j] -= r;
for(i = j; t[i] != -1 && i; i = t[i])
f[t[i]][i]+=r,
f[i][t[i]]-=r;
flux += r;
}
fprintf(out, "%d\n", flux);
fclose(in);
fclose(out);
return 0;
}