Cod sursa(job #320180)

Utilizator stefanrStefan Ruseti stefanr Data 3 iunie 2009 21:37:50
Problema Flux maxim Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.09 kb
#include<stdio.h>

int c[1001][1001],n,m;


int main()
{
    FILE *fin,*fout;
    int i,j,a,b,v[1001],p[1001],s[1001],k,gasit,min;
    fin=fopen("maxflow.in","rt");
    fout=fopen("maxflow.out","wt");
    fscanf(fin,"%i %i",&n,&m);
    for(i=1;i<=m;i++) 
     {fscanf(fin,"%i %i %i",&a,&b,&k);
      c[a][b]=k;
     }
    do
     {k=1;
      j=1;
      v[1]=1;
      p[1]=0;
      gasit=0;
      min=0;
      for(i=1;i<=n;i++) s[i]=0;
      s[1]=1;
      while(j<=k && !gasit)
       {for(i=1;i<=n;i++) 
         if(c[v[j]][i]>0 && !s[i])
          {v[++k]=i;
           p[k]=j;
           s[i]=1;
           if(i==n) gasit=1;
          }
        j++;
       }
      i=k;
      while(p[i]!=0)
       {if(min==0 || c[v[p[i]]][v[i]]<min) min=c[v[p[i]]][v[i]];
        i=p[i];
       }
      i=k;
      while(p[i]!=0)
       {c[v[p[i]]][v[i]]-=min;
        c[v[i]][v[p[i]]]+=min;
        i=p[i];
       }
        
     }while(min!=0);
    k=0;
    for(i=1;i<=n;i++) k+=c[n][i];
    fprintf(fout,"%i",k); 
    fclose(fin);
    fclose(fout);
    return 0;
}