Pagini recente » Diferente pentru utilizator/caiuscheveresan intre reviziile 1 si 2 | Istoria paginii utilizator/dragomir_dragos | Istoria paginii utilizator/danielmacky | Istoria paginii utilizator/lisbase | Cod sursa (job #429349)
Cod sursa(job #429349)
//#include "stdafx.h"
#include<stdio.h>
#include<vector>
#include<algorithm>
#define NMAX 1010
#define inf 1001000
using namespace std;
int x[NMAX][NMAX],flux[NMAX][NMAX];
int viz[NMAX],in,sf,i,j,n,m,k,l,a,s,b,c,nod,rez;
struct kkt
{
int X,Y,Z;
} q[NMAX];
void solve()
{
a=0;
in=sf=1;
q[1].X=1;
q[1].Z=inf;
for (i=1;i<=n;i++)
viz[i]=0;
viz[1]=1;
while (in<=sf)
{
nod=q[in].X;
for (i=1;i<=n;++i)
if (!viz[i])
if (x[nod][i]||x[i][nod])
{
rez=x[nod][i]-flux[nod][i];
if (rez)
{
sf++;
q[sf].X=i;
q[sf].Y=in;
q[sf].Z=min(rez,q[in].Z);
viz[i]=1;
if (i==n)
{
in=inf;
break;
}
}
}
in++;
}
if (in<inf)
return ;
a=1;
rez=q[sf].Z;
while (sf)
{
nod=q[sf].X;
k=q[sf].Y;
flux[q[k].X][nod]+=rez;
flux[nod][q[k].X]-=rez;
sf=q[sf].Y;
}
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=m;++i)
{
scanf("%d%d%d",&a,&b,&c);
x[a][b]=c;
}
a=1;
while (a)
solve();
for (i=1;i<=n;i++)
s+=flux[1][i];
printf("%d\n",s);
return 0;
}