Pagini recente » Cod sursa (job #1802144) | Cod sursa (job #539363) | Cod sursa (job #241104) | Cod sursa (job #1600804) | Cod sursa (job #276986)
Cod sursa(job #276986)
#include<stdio.h>
#include<string.h>
#define MAXN 1005
#define INF 111111
long n,m,s,d,flux,c[MAXN][MAXN],f[MAXN][MAXN],t[MAXN],i,x,y,ca,g[MAXN][MAXN];
long min(long x,long y)
{if(x<y)return x;
return y;}
long BFS(long s,long d)
{long p,u,nod,i,q[MAXN],nn;
memset(t,0,sizeof(t));
p=u=0;
q[p]=s;
t[s]=-1;
while(p<=u)
{nod=q[p];
for(i=1;i<=g[nod][0];++i)
{nn=g[nod][i];
if(!t[nn]&&c[nod][nn]-f[nod][nn]>0)
{q[++u]=nn;
t[nn]=nod;
if(nn==d)return 1;}}
++p;}
return 0;
}
void flux_max()
{long i,cr;
for(flux=0;BFS(s,d);flux+=cr)
{cr=INF;
i=d;
while(i!=s)
{//eventual-afisare i(pt. afisarea drumului)
cr=min(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;
g[i][++g[i][0]]=t[i];
i=t[i];}
}
}
int main()
{
freopen("grader_test9.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%ld%ld",&n,&m);
s=1;d=n;
for(i=1;i<=m;++i)
{scanf("%ld%ld%ld",&x,&y,&ca);
c[x][y]=ca;
g[x][++g[x][0]]=y;
}
flux_max();
printf("%ld\n",flux);
return 0;
}