Cod sursa(job #386884)

Utilizator bora_marianBora marian bora_marian Data 26 ianuarie 2010 11:55:51
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
using namespace std;
int t[1005],n,m,c[1005][1005],flux_maxim;
void eK();
int  bfs();
int main()
{
  
  ifstream fin("maxflow.in");
  ofstream fout("maxflow.out");
  //fout<<flux_maxim;
  //fout<<endl;
  fin>>n>>m;
  for(;m;m--)
  { 
   int x,y,z;
   fin>>x>>y>>z;
   c[x][y]=z;
   }   
  eK();
  fout<<flux_maxim;
  return 0;
}
int  bfs()
{
    int coada[1005], st=1,dr=1;
    for(int i=1;i<=n;++i)
        t[i]=-1;
    t[1]=0;
    coada[1]=1;
    while(st<=dr){
        int k=coada[st];
        for(int i=1;i<=n;++i)
                if(c[k][i]>0 && t[i]==-1){
                    coada[++dr]=i;
                    t[i]=k;
                    if(i==n)
                      return 1;
                }
        st++;
    }
    return 0;
}
void eK()
{
  while(bfs())
  {
      int cmin=1<<30;
      for(int i=n; t[i] ;i=t[i])
            if(cmin>c[t[i]][i])
               cmin=c[t[i]][i];
      flux_maxim+=cmin;
      for(int i=n; t[i] ;i=t[i]){
          c[t[i]][i] -= cmin;
          c[i][t[i]] += cmin;
      }
  }  
}