Cod sursa(job #608855)

Utilizator George25Raduta George Cristian George25 Data 18 august 2011 14:16:34
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
#include<math.h>
#include<string.h>
int c[1002][1002],t[1002],n,m,f[1002][1002],plecare,final,i,u,flux,r,nu,q[100],x,y,z;

inline int bf(){
	memset(t,0,sizeof(t));
	plecare=1;
	final=1;
	q[1]=1;
	t[1]=-1;
	while (plecare<=final){
		x=q[plecare];
		for (i=1; i<=n; i++)
			if (c[x][i]>f[x][i] && t[i]==0 && i!=x){
				final++;
				q[final]=i;
				t[i]=x;
				if (i==n) return (1);
			}
		plecare++;
	}
	return(0);
	}
	
int main(){
	freopen("maxflow.in","r",stdin);
	freopen("maxflow.out","w",stdout);
	scanf("%d %d",&n,&m);
	memset(c,0,sizeof(c));
	memset(f,0,sizeof(f));
	for (i=1; i<=m; i++){
		scanf("%d %d %d",&x,&y,&z);
		c[x][y]=z;
	}
	while (bf()!=0){
		r=20000000;
		i=n;
		while (i!=1){
			nu=c[t[i]][i]-f[t[i]][i];
			if (r>nu) r=nu;
			i=t[i];
		}
		i=n;
		while (i!=1){
			f[t[i]][i]=f[t[i]][i]+r;
			f[i][t[i]]=f[i][t[i]]-r;
			i=t[i];
		}
		flux=flux+r;
	}
	printf("%d\n",flux);
	return(0);
}