Mai intai trebuie sa te autentifici.

Cod sursa(job #373189)

Utilizator titusuTitus C titusu Data 12 decembrie 2009 21:20:36
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
using namespace std;
#include <cstdio>
#define MAX 1005
#define INFINIT (1<<30)
int c[MAX][MAX], n, flux_maxim, t[MAX];

void write(){
	freopen("maxflow.out","w",stdout);
	printf("%d",flux_maxim);
}

void read(){
	int m,i,j,k;
	scanf("%d%d",&n,&m);
	for( ; m ; --m){
		scanf("%d%d%d",&i,&j,&k);
		c[i][j]=k;
	}
}

int bfs(int sursa,int destinatie){
	int coada[MAX], st=1,dr=1, k,i;
	for(i=1; i <= n ;i++)
		t[i]=-1;
	coada[1]=sursa;t[sursa]=0;
	while(st<=dr){
		k=coada[st++];
		for(i=1;i<=n;i++)
			if(t[i]==-1 && c[k][i]!=0){
				t[i] = k, coada[++dr] = i;
				if(i==destinatie)
					return 1;
			}
	}
	return 0;
}

void edmond_karp(){
	int i, dcur;
	while(bfs(1,n)){
		dcur=INFINIT;
		i=n;
		while(t[i]){
			if(c[t[i]][i]<dcur)
				dcur= c[t[i]][i];
			i=t[i];
		}
		i=n;
		while(t[i]){
			c[t[i]][i] -= dcur;
			c[i][t[i]] += dcur;
			i=t[i];
		}
		flux_maxim +=dcur;
	}
}

int main(){
	freopen("maxflow.in","r",stdin);
	read();
	edmond_karp();
	write();
	return 0;
}