Pagini recente » Cod sursa (job #2969052) | Cod sursa (job #1877143) | Cod sursa (job #1792633) | Cod sursa (job #185420) | Cod sursa (job #275698)
Cod sursa(job #275698)
#include<stdio.h>
#include<string.h>
#define MAXN 1001
#define INF 110000
int n,m,s,d,flux,c[MAXN][MAXN],f[MAXN][MAXN],t[MAXN];
int min(int a, int b)
{
if(a>b)
return b;
return a;
}
int bfs(int s, int d)
{
int p,u,nod,i,q[MAXN];
memset(t,0,sizeof(t));
p=0; 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()
{
int i,cr;
for(flux=0;bfs(s,d);flux+=cr)
{
cr=INF;
i=d;
while(i!=s)
{
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()
{
int i,j,z,x,y;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
s=1; d=n;
for(i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
c[x][y]=z;
}
flux_max();
printf("%d\n",flux);
return 0;
}