Cod sursa(job #592679)

Utilizator lily3Moldovan Liliana lily3 Data 29 mai 2011 20:50:07
Problema Flux maxim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
using namespace std;

int i,j,n,m,a[1001],b[1001],t[1004][1004],f1[1004][1004],x,y,c,inc,sf,min1;
int q[1004],viz[1004],v[1003],s1=0;
int bf()
{
	int st,dr,x,i;
	for(i=1;i<=n;i++)
		viz[i]=0;
	st=dr=0;
	q[0]=1;
	while(st<=dr)
	{
		x=q[st];
		for(i=1;i<=n;i++)
			if(t[x][i]-f1[x][i]>0&&!viz[i])
			{
				viz[i]=1;
				q[++dr]=i;
				v[i]=x;
			}
			st++;
	}
	return viz[sf];
}
int main()
{
	FILE *f=fopen("maxflow.in","r");
	FILE *g=fopen("maxflow.out","w");
	fscanf(f,"%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		fscanf(f,"%d%d%d",&x,&y,&c);
		t[x][y]=c;
	}
	inc=1,sf=n;
	while(bf())
	{
		for(i=1;i<=n;i++)
			if(t[i][n]-f1[i][n]>0)
			{
				min1=t[i][n]-f1[i][n];
				for(j=i;j!=inc;j=v[j])
					if(t[v[j]][j]-f1[v[j]][j]<min1)
						min1=t[v[j]][j]-f1[v[j]][j];
					for(j=i;j!=1;j=v[j])
					{
						f1[v[j]][j]+=min1;
						f1[j][v[j]]-=min1;
					}
					f1[i][n]+=min1;
					f1[n][i]-=min1;
					s1+=min1;
			}
	}
	fprintf(g,"%d",s1);
	return 0;
}