Cod sursa(job #673922)

Utilizator ms-ninjacristescu liviu ms-ninja Data 5 februarie 2012 11:21:23
Problema Flux maxim Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
#define inf 0x3f3f3f3f
#define dim 1005
int n, m,coada[100000][3],mic,sol;
int v[dim][dim];

void read()
{
	int a, b, i;
	fin>>n >>m;
	for(i=1;i<=m;++i)
	{
		fin>>a >>b;
		fin>>v[a][b];
	}
}

void bfs()
{
	int inc=1,sf=1;
	coada[1][0]=1;
	while(inc<=sf)
	{
		int x=coada[inc][0];
		if(x==n)
		{
			mic=inf;
			int nod=inc;
			while(nod!=1)
			{
				mic=min(mic,v[coada[nod][1]][coada[nod][0]]);
				nod=coada[nod][2];
			}
			nod=inc;
			while(nod!=1)
			{
				v[coada[nod][1]][coada[nod][0]]-=mic;
				nod=coada[nod][2];
			}
			sol+=mic;
		}
		for(int k=1;k<=n;++k)
		{
			if(v[x][k]!=0)
			{
				coada[++sf][0]=k;
				coada[sf][1]=x;
				coada[sf][2]=inc;
			}
		}
		++inc;
	}
}

int main()
{
	read();
	bfs();
	fout<<sol;
	
	return 0;
}