Cod sursa(job #410657)

Utilizator preda_alexandruPreda Alexandru preda_alexandru Data 4 martie 2010 15:31:25
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 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++)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;
																	if(i==n)return 1;
																	}
			 li++;
			 }
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;
				 fin>>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;
}