Cod sursa(job #287010)

Utilizator cotofanaCotofana Cristian cotofana Data 24 martie 2009 13:59:31
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#include <queue>
#define dim 1100

using namespace std;

int n, m, c[dim][dim], f, p[dim];
queue<int> q;

bool bfs()
{
	int nod, i;
	memset(p, -1, sizeof(p));
	q.push(1);
	p[1]=0;
	while (!q.empty())
	{
		nod=q.front();
		q.pop();
		for (i=1; i<=n; i++)
			if (c[nod][i] && p[i]==-1)
			{
				q.push(i);
				p[i]=nod;
				if (i==n) 
				{
					while (!q.empty()) q.pop();
					return true;
				}
			}
	}
	return false;
}

int main()
{
	int i, x, y, z, fm;
	freopen("maxflow.in", "r", stdin);
	freopen("maxflow.out", "w", stdout);
	scanf("%d %d\n", &n, &m);
	for (i=1; i<=m; i++)
	{
		scanf("%d %d %d\n", &x, &y, &z);
		c[x][y]=z;
	}
	for (f=0; bfs(); f+=fm)
	{
		fm=1<<30;
		for (i=n; i!=1; i=p[i])
			if (c[p[i]][i]<fm) fm=c[p[i]][i];
		for (i=n; i!=1; i=p[i])
		{
			c[p[i]][i]-=fm;
			c[i][p[i]]+=fm;
		}
	}
	printf("%d\n", f);
	return 0;
}