Pagini recente » Cod sursa (job #90981) | Cod sursa (job #2341865) | Cod sursa (job #300677) | Cod sursa (job #2881986) | Cod sursa (job #300536)
Cod sursa(job #300536)
#include<stdio.h>
#include<string.h>
#define Nmax 1050
int n,m,C[Nmax][Nmax],F[Nmax][Nmax],v[Nmax],t[Nmax],viz[Nmax],sol;
int BF()
{
int st=1,dr=1,nod;
for(int i=1;i<=n;++i)
viz[i]=0;
v[1]=1;
for(;st<=dr;++st)
{
nod=v[st];
for(int i=1;i<=n;++i)
if (C[nod][i]-F[nod][i]>0 && !viz[i])
{
viz[i]=1;
v[++dr]=i;
t[i]=nod;
}
}
return (viz[n]);
}
void Fulkerson()
{
int i,min;
while(BF())
for(int j=1;j<=n;++j)
if(C[j][n]-F[j][n]>0)
{
min=C[j][n]-F[j][n];
for(i=j;i!=1;i=t[i])
if(C[t[i]][i]-F[t[i]][i]<min)
min=C[t[i]][i]-F[t[i]][i];
for(i=j;i!=1;i=t[i])
{
F[t[i]][i]+=min;
F[i][t[i]]-=min;
}
F[j][n]+=min;
F[n][j]-=min;
sol+=min;
}
}
int main()
{
int i,a,b,c;
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);
C[a][b]=c;
}
Fulkerson();
printf("%d\n",sol);
return 0;
}