Cod sursa(job #247301)

Utilizator igsifvevc avb igsi Data 22 ianuarie 2009 19:28:35
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream.h>

#define max_n 1001
#define infinit 1<<30

ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

int c[max_n][max_n],f[max_n][max_n],t[max_n],n,m,flux;

inline int min(int a,int b){ return (a<b ? a : b);}

int bf(int s,int d)
{
    int li,ls,nod,q[max_n],i;
    
    memset(t,0,sizeof(t));
    
    for(li=1,ls=1,t[s]=-1,q[1]=s;li<=ls;li++)
    {
       nod=q[li];
       for(i=1;i<=n;i++)
          if(!t[i] && c[nod][i]>f[nod][i])
          {
             q[++ls]=i;
             t[i]=nod;
             if(i==d) return 1;
          }
    }
    return 0;
}

int main()
{
    int i,r,x,y,z;
    
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
      fin>>x>>y>>z;
      c[x][y]=z;
    }
    
    for(flux=0;bf(1,n);flux+=r)
    {
      r=infinit;
      i=n;
      while(i!=1)
      {
        r=min(r,c[t[i]][i]-f[t[i]][i]);
        i=t[i];
      }
      i=n;
      while(i!=1)
      {
         f[t[i]][i]+=r;
         f[i][t[i]]-=r;
         i=t[i];
      }
    }
    
    fout<<flux<<'\n';
    
    fout.close();
    return 0;
}