Cod sursa(job #299008)
#include<stdio.h>
#include<string.h>
#define Nmax 1050
#define inf 0x3f3f
int n,N,m,ma[Nmax][Nmax],v[Nmax],viz[Nmax],in,sf,a,b,c;
int DF(int nod)
{
if (v[nod]==sf)
{
N=nod;
return 1;
}
for(int i=1;i<=n;++i)
if (ma[v[nod]][i] && !viz[i])
{
v[nod+1]=i;
viz[i]++;
a=DF(nod+1);
viz[i]--;
if (a)
return 1;
}
return 0;
}
void Fulkerson()
{
v[1]=in;
viz[in]=1;
while(DF(1))
{
int min=inf,i;
for(i=2;i<=N;++i)
if (min>ma[ v[i-1] ][ v[i] ])
min=ma[ v[i-1] ][ v[i] ];
for(i=2;i<=N;++i)
{
ma[v[i-1]][v[i]]-=min;
ma[v[i]][v[i-1]]+=min;
}
/*for(i=1;i<=N;++i)
printf("%d ",v[i]);
printf("\n");
memset(viz,0,Nmax);*/
}
}
int main()
{
int i;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
in=1; sf=n;
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&a,&b,&c);
ma[a][b]=c;
}
Fulkerson();
int sol=0;
for(i=1;i<=n;++i)
sol+=ma[i][in];
printf("%d\n",sol);
return 0;
}