Cod sursa(job #386888)

Utilizator mihaimoldovanMihai Moldovan mihaimoldovan Data 26 ianuarie 2010 11:59:34
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<fstream>
using namespace std;
int n,fmax;
int c[1005][1005];
int coada[1005];
int t[1005];
int st,dr,k,i;
int bfs()
{
	st=dr=1;
	coada[st]=1;
	for(i=1;i<=n;i++)
		t[i]=-1;
	t[1]=0;
	while(st<=dr)
		{
			k=coada[st];
			for(i=1;i<=n;i++)
				if(c[k][i]&&t[i]==-1)
					{
						coada[++dr]=i;
						t[i]=k;
						if(i==n)
							return 1;
					}
			st++;	
		}
	 return 0;
}
int main()
{
	int m,x,y,z,cmin;
	FILE *fin=fopen("maxflow.in","r");
	fscanf(fin,"%d%d",&n,&m);
	for(;m>0;m--)
		{
			fscanf(fin,"%d%d%d",&x,&y,&z);
			c[x][y]=z;
		}
	while(bfs())
	{
		cmin=1<<30;
		for(i=n;t[i]!=0;i=t[i])
			if(c[t[i]][i]<cmin)
				cmin=c[t[i]][i];
		for(i=n;t[i]!=0;i=t[i])
			{
				c[t[i]][i]-=cmin;
				c[i][t[i]]+=cmin;
			}
		fmax+=cmin;
	}
	FILE *fout=fopen("maxflow.out","w");
	fprintf(fout,"%d",fmax);
	return 0;
}