Cod sursa(job #582557)

Utilizator tinkyAndrei Ilisei tinky Data 15 aprilie 2011 16:15:35
Problema Flux maxim Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
#include<queue>
#define maxn 1010
#define inf INT_MAX
using namespace std;
int v[maxn][maxn],a[maxn][maxn],viz[maxn];
int n,m;
queue<int> q;
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;
	memset(viz,0,sizeof(viz));
	while (!q.empty())
		q.pop();
	q.push(1);
	while (!q.empty())
	{
		x=q.front();
		q.pop();
		for (i=1;i<=n;i++)
			if (v[x][i]>a[x][i]&&!viz[i])
			{
				q.push(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';
}