Cod sursa(job #410653)

Utilizator preda_alexandruPreda Alexandru preda_alexandru Data 4 martie 2010 15:29:40
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 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 j,x,y,fm=0,min;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

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

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