Pagini recente » Cod sursa (job #995256) | Cod sursa (job #2934123) | Cod sursa (job #2383016) | Cod sursa (job #1980670) | Cod sursa (job #400207)
Cod sursa(job #400207)
# include <stdio.h>
# define Nmax 1024
int n,m,viz[Nmax],T[Nmax],c[Nmax],f,Ct[Nmax][Nmax],F[Nmax][Nmax];
int sursa, dest;
int bf()
{
int p,u,x,i;
for(i=1;i<=n;++i)
viz[i]=0;
p=u=1; c[1]=sursa;
while(p<=u) {
x=c[p];
for(i=1;i<=n;++i)
if(Ct[x][i]-F[x][i]>0 && viz[i]==0){
c[++u]=i;
viz[i]=1;
T[i]=x;
}
p++;
}
return viz[dest];
}
int main()
{
int x,y,c,min,i,j;
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",&x,&y,&c);
Ct[x][y]=c;
}
sursa=1; dest=n;
while(bf())
for(i=1;i<=n;++i)
if(Ct[i][n]-F[i][n]>0){
min=Ct[i][n]-F[i][n];
for(j=i;j!=1;j=T[j])
if(Ct[T[j]][j]-F[T[j]][j]<min)
min=Ct[T[j]][j]-F[T[j]][j];
for(j=i;j!=1;j=T[j]){
F[T[j]][j]+=min;
F[j][T[j]]-=min;
}
F[i][n]+=min;
F[n][i]-=min;
f+=min;
}
printf("%d\n",f);
return 0;
}