Cod sursa(job #717694)

Utilizator Robert29FMI Tilica Robert Robert29 Data 20 martie 2012 10:06:54
Problema Flux Scor 88
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<stdio.h>
FILE*f=fopen("flux.in","r");
FILE*g=fopen("flux.out","w");
int n,m;
double max,a[103][103],w[104];
struct muchii
{
	int x,y,z;
}v[5002];
double intreg (double a)
{
	if(a<0)
		return -a;
	return a;
}
int main()
{
	fscanf(f,"%d%d",&n,&m);
	for(int i=1;i<=m;++i)
	{
		fscanf(f,"%d%d%d",&v[i].x,&v[i].y,&v[i].z);
		a[v[i].x][v[i].x]++;
		a[v[i].x][v[i].y]--;
		a[v[i].y][v[i].x]--;
		a[v[i].y][v[i].y]++;
		
	}
	
	a[n][n+1]=1;

	for(int i=2;i<=n;++i)
	{
		
		int t=i;
		while(!a[t][i]&&t<=n)
			++t;
		if(t<=n)
		{
			for(int ii=i;ii<=n+1;++ii)
			{
				double aux=a[i][ii];
				a[i][ii]=a[t][ii];
				a[t][ii]=aux;
			}
			
			for(int j=i+1;j<=n;++j)
			{
				double y=a[j][i]/a[i][i];
				for(t=i;t<=n+1;++t)
					a[j][t]-=y*a[i][t];
			}
		}
	}
	
	for(int i=n;i>1;--i)
	{
		
		for(int j=n;j>i;--j)
			a[i][n+1]-=w[j]*a[i][j];
		w[i]=a[i][n+1]/a[i][i];
	}
	max=2000000000;
	for(int i=1;i<=m;++i)
		if(intreg(v[i].z/(w[v[i].y]-w[v[i].x]))<max)
			max=intreg(v[i].z/(w[v[i].y]-w[v[i].x]));
	

	fprintf(g,"%.3lf",max);
	fclose(f);
	fclose(g);
	return 0;
}