Cod sursa(job #429339)

Utilizator za_wolfpalianos cristian za_wolf Data 30 martie 2010 01:04:34
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include "stdafx.h"
#include<stdio.h>
#include<vector>
#include<algorithm>
#define NMAX 1010
#define inf 1001000
using namespace std;
int x[NMAX][NMAX],flux[NMAX][NMAX];
int viz[NMAX],in,sf,i,j,n,m,k,l,a,s,b,c,nod,rez;
struct kkt
{
	int X,Y,Z;
}	q[NMAX];

void solve()
{
	a=0;
	in=sf=1;
	q[1].X=1;
	q[1].Z=inf;
	for (i=1;i<=n;i++)
		viz[i]=0;
	viz[1]=1;
	while (in<=sf)
	{
		nod=q[in].X;
		for (i=1;i<=n;++i)
			if (!viz[i])
				if (x[nod][i]||x[i][nod])
				{
					rez=x[nod][i]-flux[nod][i];
					if (rez)
					{
						sf++;
						q[sf].X=i;
						q[sf].Y=in;
						q[sf].Z=min(rez,q[in].Z);
						viz[i]=1;
						if (i==n)
						{
							in=inf;
							break;
						}
					}
					
				}
		in++;
	}
	if (in<inf)
		return ;
	a=1;
	rez=q[sf].Z;
	while (sf)
	{
		nod=q[sf].X;
		flux[q[sf].Y][nod]+=rez;
		flux[nod][q[sf].Y]-=rez;
		sf=q[sf].Y;
	}

}
int main()
{
	freopen("maxflow.in","r",stdin);
	freopen("maxflow.out","w",stdout);
	scanf("%d%d",&n,&m);
	for (i=1;i<=m;++i)
	{
		scanf("%d%d%d",&a,&b,&c);
		x[a][b]=c;
	}
	a=1;
	while (a)
		solve();
	
	for (i=1;i<=n;i++)
		s+=flux[1][i];
	printf("%d\n",s);


	return 0;
}