Cod sursa(job #410630)

Utilizator preda_alexandruPreda Alexandru preda_alexandru Data 4 martie 2010 15:17:33
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream.h>
#include<iostream.h>
#define NMAX 1024
int n,m,c[NMAX][NMAX],f[NMAX][NMAX],q[NMAX],t[NMAX];
bool s[NMAX];

int bfs()
{
int i,li=1,ls=1;
for(i=1;i<=n;i++){
				 t[i]=0;
				 s[i]=0;
				 }
q[1]=1;
s[1]=1;
while(li<=ls){
			 for(i=1;i<=n;i++)if(!s[i] && c[q[li]][i]-f[q[li]][i]>0){
																	q[++ls]=i;
																	t[i]=q[li];
																	s[i]=1;
																	}
			 li++;
			 }
if(t[n])return 1;
return 0;
}

int main()
{
int i,x,y,fm=0,min;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

fin>>n>>m;
for(i=1;i<=m;i++)fin>>x>>y>>c[x][y];

while(bfs()){
			min=c[t[n]][n]-f[t[n]][n];
			i=t[n];
			while(t[i]){
						if(c[t[i]][i]-f[t[i]][i]<min)min=c[t[i]][i]-f[t[i]][i];
						i=t[i];
					   }
			i=n;
			while(t[i]){
					   f[t[i]][i]=f[t[i]][i]+min;
					   i=t[i];
					   }
			fm=fm+min;
			}
fout<<fm;
return 0;
}