Cod sursa(job #371525)

Utilizator titusuTitus C titusu Data 5 decembrie 2009 17:38:25
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
using namespace std;
#include <cstdio>
#define MAX 1005
#define INFINIT 1<<30

int cap[MAX][MAX], n,  tata[MAX], flux_maxim;


void read(){
	freopen("maxflow.in","r",stdin);
	int m,i,j,c;
	scanf("%d%d",&n,&m);
	for(; m ; --m){
		scanf("%d%d%d",&i,&j,&c);
		cap[i][j]=c;
	}
}



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


int main(){
	read();
	while(bfs(1,n)){
		int v , k , min=INFINIT;
		v=n;
		while(k=tata[v]){
			if(cap[k][v] < min)
				min = cap[k][v];
			v=k;
		}
		v= n;
		while(k = tata[v]){
			cap[k][v] -= min;
			cap[v][k] += min;
			v=k;
		}
		flux_maxim += min;

	}
	freopen("maxflow.out","w", stdout);
	printf("%d", flux_maxim);
	return 0;
}