Cod sursa(job #581060)

Utilizator mihai995mihai995 mihai995 Data 13 aprilie 2011 18:40:19
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
using namespace std;

const int N=1001,inf=1<<30;
int cap[N][N],v[N],T[N],flux[N][N],n;
bool use[N];

ifstream in("maxflow.in");
ofstream out("maxflow.out");

bool bfs(int X,int Y)
{
	int x,y,st=0,dr=0;
	v[++dr]=X;
	for (x=1;x<=n;x++)
	{
		use[x]=false;
		T[x]=0;
	}
	while (st<dr)
	{
		x=v[++st];
		if (x==Y)
			return true;
		for (y=1;y<=n;y++)
		{
			if (!use[y] && cap[x][y]>flux[x][y])
			{
				v[++dr]=y;
				T[y]=x;
				use[y]=true;
			}
		}
	}
	return false;
}

int max_flow(int X,int Y)
{
	int M,x,flow=0;
	while (bfs(X,Y))
	{
		M=inf;
		for (x=Y;x!=X;x=T[x])
			M=min(M,cap[T[x]][x]-flux[T[x]][x]);
		for (x=Y;x!=X;x=T[x])
		{
			flux[T[x]][x]+=M;
			flux[x][T[x]]-=M;
		}
		flow+=M;
	}
	return flow;
}

int main()
{
	int m,x,y,c;
	in>>n>>m;
	while (m--)
	{
		in>>x>>y>>c;
		cap[x][y]=c;
	}
	out<<max_flow(1,n)<<"\n";
	return 0;
}