Cod sursa(job #676486)

Utilizator ms-ninjacristescu liviu ms-ninja Data 9 februarie 2012 10:26:14
Problema Flux maxim Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
#define inf 0x3f3f3f3f
#define dim 1005
#define fs first
#define sc second
#define mp make_pair
#define pb push_back
vector< pair <int,int> >v[dim];
short int coada[1000000][3],n,m,sol;
int mat[dim][dim];

void read()
{
	int i, x, y, t;
	fin>>n >>m;
	for(i=1;i<=m;++i)
	{
		fin>>x >>y >>t;
		v[x].pb(mp(y,t));
		mat[x][y]=t;
	}
}

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

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