Cod sursa(job #420741)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 20 martie 2010 14:29:28
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
FILE *f,*g;
long a[1001][1001],c[1001],i,n,m,x,y,z,min,parinte[1001],flux,u,p,viz[1001],ind;
int bf()
{ u=p=1; c[1]=1; viz[1]=ind;
  while(p<=u)
   { for(i=1;i<=n;i++) if(a[c[p]][i]&&viz[i]!=ind) { u++; c[u]=i; viz[i]=ind; parinte[i]=c[p]; }
     p++;
   }
  return parinte[n];
}
int main()
{ f=fopen("maxflow.in","r"); g=fopen("maxflow.out","w");
  fscanf(f,"%ld%ld",&n,&m);
  for(i=1;i<=m;i++) { fscanf(f,"%ld%ld%ld",&x,&y,&z); a[x][y]=z; }
  ind=1;
  while(bf())
   { x=n; min=1000000;
     while(x!=1)
	  { if(a[parinte[x]][x]<min) min=a[parinte[x]][x];
	    x=parinte[x];
	  }
	 x=n;
	 while(x!=1)
	  { a[parinte[x]][x]-=min; a[x][parinte[x]]+=min;
        x=parinte[x];
      }
	 flux+=min; ind++; parinte[n]=0;
   }
  fprintf(g,"%ld",flux);
  fclose(g);
  return 0;
}