Cod sursa(job #638882)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 21 noiembrie 2011 20:15:20
Problema Tunelul groazei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#define NMAX 301
int n,m,cnt[NMAX][NMAX],grd[NMAX],cost[NMAX][NMAX];
double B[NMAX][NMAX],rez[NMAX];
int main()
{
	freopen("tunel.in","r",stdin);
	freopen("tunel.out","w",stdout);
	scanf("%d%d",&n,&m);
	int i,j,k,x,y,z;
	double val;
	for (i=1; i<=m; i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		grd[x]++; grd[y]++;
		cnt[x][y]++; cnt[y][x]++;
		cost[x][y]+=z; cost[y][x]+=z;
	}
	
	for (i=1; i<n; i++)
	{
		B[i][i]=grd[i];
		for (j=1; j<n; j++)
			if (cost[i][j])
			{
				B[i][j]=-cnt[i][j];
				B[i][n]+=cost[i][j];
			}
		B[i][n]+=cost[i][n];
		for (j=1; j<=n; j++)
			B[i][j]/=grd[i];
	}
	
	for (i=1; i<n; i++)
	{
		for (j=i+1; j<n; j++)
		{
			val=B[j][i]/B[i][i];
			for (k=i; k<=n; k++)
				B[j][k]-=val*B[i][k];
		}
	}
	
	for (i=n-1; i>=1; i--)
	{
		rez[i]=B[i][n];
		for (j=i+1; j<n; j++)
			rez[i]-=B[i][j]*rez[j];
		rez[i]/=B[i][i];
	}
	printf("%lf\n",rez[1]);
	return 0;
}