Cod sursa(job #475877)

Utilizator cosmyoPaunel Cosmin cosmyo Data 8 august 2010 22:54:06
Problema Flux maxim Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream.h>
#define NMAX 1005
#define inf 100000
#include<queue>
using namespace std;
long t[NMAX],c[NMAX][NMAX],f[NMAX][NMAX],flux,s,d,m,n;
queue<long> q;
void cit()
{ifstream fin("maxflow.in");
	fin>>n>>m;
	long i,x,y,ct;
		for(i=1;i<=m;++i)
		{fin>>x>>y>>ct;
		 c[x][y]=ct;
		}
	s=1;
    d=n;	
   fin.close();
}
long bfs()
{long i,k;
 for(i=1;i<=n;++i)
	 t[i]=0;
  q.push(s);
  t[s]=n+1;
   while(!q.empty())
   { k=q.front();
		 for(i=1;i<=n;++i)
			 if(f[k][i]<c[k][i]&&t[i]==0)
			  {t[i]=k;
			   q.push(i);
			  }
	  q.pop();
   }
 return t[d];
}
void maxflow()
{long i,j,r;
 for(;bfs();)
	 {for(i=1;i<=n;++i)
		 if(c[i][d]>f[i][d]&&t[i])
		 {r=inf;
		  t[d]=i;
		  for(j=d;j!=s;j=t[j])
			  if(c[t[j]][j]-f[t[j]][j]<r)
				  r=c[t[j]][j]-f[t[j]][j];
		  for(j=d;j!=s;j=t[j])
			  {f[t[j]][j]+=r;f[j][t[j]]-=r;}
		  flux+=r;	
		 }
	 }
}
void afis()
{ofstream fout("maxflow.out");
  fout<<flux<<'\n';
 fout.close();
}
int main()
{cit();
 maxflow();
 afis();
 return 0;
}