Cod sursa(job #275270)

Utilizator frumushelRadu Lucian Andrei frumushel Data 10 martie 2009 12:41:12
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<fstream.h>
const int infinit=1.e20;
int t[100],f[100][100],c[100][100],n,s[100];
int bf( int nod,int d)
{
 int q[100],i_c,sf_c,i;
 memset(t,0,sizeof(t));
 memset(s,0,sizeof(s));
 i_c=sf_c=1;
 t[1]=-1;
 s[nod]=1;
 q[i_c]=q[sf_c]=nod;
 while(i_c<=sf_c)
 {
  for(i=1;i<=n;i++)
   if(c[q[i_c]][i]!=0 && s[i]==0){ s[i]=1;
			  sf_c++;
			  t[i]=q[i_c];
			  q[sf_c]=i;
   }
   i_c++;
   }
  if(s[d]==1)return 1;
  return 0;
}
int main()
{ int sum=0,m,i,j,o,min,cost;
 ifstream g("maxflow.in");
 ofstream h("maxflow.out");
 g>>n>>m;
 for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
   f[i][j]=32000;
  for(o=1;o<=m;o++)
  {
   g>>i>>j >>cost;
   c[i][j]=c[j][i]=cost;
   f[j][i]=0;
  }
 while(bf(1,n))
 {
  i=n;
  min=32000;
  while(t[i]!=-1)
   {
    if(c[t[i]][i]<min)min=c[t[i]][i];
    i=t[i];
   }
  i=n;
  while(t[i]!=-1)
  {
   c[t[i]][i]-=min;
   c[i][t[i]]-=min;
   f[i][t[i]]+=min;
   i=t[i];
  }
 sum+=min;
 }                                                        
 h<<sum;
 return 0;
}