Cod sursa(job #397676)

Utilizator lorandCsorba Lorand-Alexandru lorand Data 17 februarie 2010 12:25:46
Problema Flux maxim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
using namespace std;
#include<fstream>
#include<iostream>
int c[1003][1003],t[1003],w[1003],nw,fmaxim,n,m;
int bfs(int start)
{
	int s,d,i,k,coada[1005];
	s=d=1;
	coada[s]=start;
	for(i=1;i<=n;++i)
		t[i]=-1;
	t[s]=0;
	while(s<=d)
	{
		k=coada[s++];
		if(k==n)
			return 1;
		for(i=1;i<=n;++i)
			if(c[k][i]>0 && t[i]==-1)
			{
				coada[++d]=i;
				t[i]=k;
			}
	}
	return 0;
}
void ek()
{
	int k;
	while(bfs(1))
	{
		for(int i=1;i<=nw;++i)
			if(t[w[i]]!=-1 && c[w[i]][n]>0)
			{
				int cmin=1<<30;
				t[n]=w[i];
				for(k=n;t[k];k=t[k])
				   if(c[t[k]][k]<cmin)
					 cmin=c[t[k]][k];
				for(k=n;t[k];k=t[k])
				{
					c[t[k]][k]-=cmin;
					c[k][t[k]]+=cmin;
				}
				fmaxim+=cmin;
			}
	}
}
int main()
{
	int x,y,v,i;
	ifstream fin("maxflow.in");
	fin>>n>>m;
	for(i=1;i<=m;++i)
	{
		fin>>x>>y>>v;
		c[x][y]=v;
		if(y==n)
			w[++nw]=x;
	}
	ek();
	ofstream fout("maxflow.out");
	fout<<fmaxim;
	return 0;
}