Cod sursa(job #275133)

Utilizator abcdefjean valjean abcdef Data 10 martie 2009 11:23:06
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
#include <string.h>
int p,u,s[1001],i,n,parinte[1001],c[1001][1001],m,x,y,z,fluxm,min;
int bf()
{ p=1; u=1; s[p]=1;
  while(p<=u)
   {for(i=1;i<=n;i++) if(!parinte[i]&&c[s[p]][i]&&i!=1) { u++; s[u]=i; parinte[i]=s[p]; }
    p++;
   }
  if(parinte[n])return 1;else return 0;
}
int main()
{ 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,&z);
     c[x][y]=z;
   }
  while(bf())
   { min=111000; x=n;
     while(parinte[x])
      { if(c[parinte[x]][x]<min) min=c[parinte[x]][x];
	x=parinte[x];
      }
     x=n;fluxm+=min;
     while(parinte[x])
      { c[parinte[x]][x]-=min;
	c[x][parinte[x]]+=min;
	x=parinte[x];
      }
     memset(parinte,0,sizeof(parinte));
   }
 printf("%d",fluxm);
 fclose(stdout);
 return 0;
}