Cod sursa(job #581995)

Utilizator horeste12Stoianovici Horatiu Andrei horeste12 Data 14 aprilie 2011 19:36:43
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<cstdio>
#define INF 0x3f3f3f3f
using namespace std;

int c[1010][1010],n,m,fluxmax;
bool a[1010][1010],viz[1010];
FILE *f;
FILE *g;

void citire()
{
	f=fopen("maxflow.in","r");
	fscanf(f,"%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int x,y,C;
		fscanf(f,"%d %d %d",&x,&y,&C);
		c[x][y]=C;
		a[x][y]=a[y][x]=true;
	}
}

int minimul(int a,int b)
{
	if(a<b)
		return a;
	return b;
}

int DF(int k,int minn)
{
	for(int i=1;i<=n;i++)
		if(a[k][i]&&!viz[i]&&c[k][i]>0)
		{
			viz[i]=true;
			if(i==n)
			{	
				viz[i]=false;
				int x=minimul(c[k][i],minn);
				c[k][i]-=x;
				c[i][k]+=x;
				return x;
			}
			else
			{
				int df=DF(i,minimul(c[k][i],minn));
				if(df)
				{
					viz[i]=false;
					c[k][i]-=df;
					c[i][k]+=df;
					return df;
				}
				viz[i]=false;
			}
		}
	return 0;
}

int main()
{
	citire();
	int df=DF(1,INF);
	while(df)
	{
		fluxmax+=df;
		df=DF(1,INF);
	}
	g=fopen("maxflow.out","w");
	fprintf(g,"%d\n",fluxmax);
	fclose(f);
	fclose(g);
	return 0;
}