Pagini recente » Cod sursa (job #922354) | Cod sursa (job #133939) | Cod sursa (job #647790) | Cod sursa (job #2477572) | Cod sursa (job #1467648)
#include <stdio.h>
int c[1005][1005];
int f[1005][1005];
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int n,m;
scanf("%d %d",&n,&m);
for (int i=1; i<=m; ++i)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
c[x][y]=z;
}
int f_total=0;
int marit=1;
while (marit > 0)
{
marit=0;
int trecut[1005];
int parcurs[1005],l;
int prec[1005];
for (int i=0; i<1005; ++i)
{
trecut[i]=0;
parcurs[i]=0;
prec[i]=0;
}
trecut[1] = 1;
parcurs[1]=1;
l=1;
prec[1]=0;
int i=1;
while (i<=l)
{
for (int j=1; j<n; ++j)
{
if (c[parcurs[i]][j]>0 && trecut[j]==0)
{
++l;
parcurs[l]=j;
prec[l]=i;
trecut[j]=1;
}
}
++i;
}
for (int i=1; i<=l; ++i)
{
if (c[parcurs[i]][n]>0)
{
int minim=c[parcurs[i]][n];
int j=i;
while (j!=1)
{
if (minim>c[parcurs[prec[j]]][parcurs[j]])
{
minim=c[parcurs[prec[j]]][parcurs[j]];
}
j=prec[j];
}
if (minim>0)
{
j=i;
c[parcurs[i]][n]-=minim;
c[n][parcurs[i]]+=minim;
while (j!=1)
{
c[parcurs[prec[j]]][parcurs[j]]-=minim;
c[parcurs[j]][parcurs[prec[j]]]+=minim;
j=prec[j];
}
marit+=minim;
}
}
}
f_total+=marit;
}
printf("%d",f_total);
fclose(stdin);
fclose(stdout);
return 0;
}