Cod sursa(job #582580)

Utilizator tinkyAndrei Ilisei tinky Data 15 aprilie 2011 16:33:41
Problema Flux maxim Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
#define maxn 1002
#define inf 0x3f3f3f3f
using namespace std;
int v[maxn][maxn],a[maxn][maxn],viz[maxn];
int n,m;
int q[maxn];
void citire()
{
	int i,x,y,c;
	ifstream in("maxflow.in");
	in>>n>>m;
	for (i=1;i<=m;i++)
	{
		in>>x>>y>>c;
		v[x][y]+=c;
	}
	in.close();
}
int bfs()
{
	int x,i,pi=1,ps=1;
	memset(viz,0,sizeof(viz));
	/*while (!q.empty())
		q.pop();*/
	q[1]=1;
	while (pi<=ps)
	{
		x=q[pi];
		pi++;
		for (i=1;i<=n;i++)
			if (v[x][i]>a[x][i]&&!viz[i])
			{
				q[++ps]=i;
				viz[i]=x;
			}
		if (viz[n])
			return 1;
	}
	return 0;
}
	

int flux()
{
	int i,mn=inf,f=0;
	while (bfs())
	{
		for (i=n;i!=1;i=viz[i])
			if (v[viz[i]][i]-a[viz[i]][i]<mn)
				mn=v[viz[i]][i]-a[viz[i]][i];
		for (i=n;i!=1;i=viz[i])
		{
			a[viz[i]][i]+=mn;
			a[i][viz[i]]-=mn;
		}
		f+=mn;
	}
	return f;
}
int main()
{
	citire();
	ofstream out("maxflow.out");
	out<<flux()<<'\n';
}