Pagini recente » Cod sursa (job #2309133) | Cod sursa (job #2129052) | Cod sursa (job #322097) | Cod sursa (job #83184) | Cod sursa (job #275613)
Cod sursa(job #275613)
#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;
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];
memset(t,0,sizeof(t));
p=u=0;
q[p]=s;
t[s]=-1;
while(p<=u)
{nod=q[p];
for(i=1;i<=n;++i)
if(!t[i]&&c[nod][i]-f[nod][i]>0)
{q[++u]=i;
t[i]=nod;
if(i==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;
i=t[i];}
}
}
int main()
{
freopen("maxflow.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;}
flux_max();
printf("%ld\n",flux);
return 0;
}