Cod sursa(job #806920)

Utilizator deneoAdrian Craciun deneo Data 3 noiembrie 2012 18:44:18
Problema Tunelul groazei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
#include <cstdio>
using namespace std;

ifstream fin ("tunel.in");

#define MAXN 300

int n, m; 
double v[MAXN][MAXN];

void reduce(int x, int y, double c) {
	for (int i = 1; i <= n; ++i) 
		v[x][i] -= c * v[y][i];
}

void gauss() {
	int i, j;
	double x;
	for (i = 1; i < n; ++i) {
		x = v[i][i];
		for (j = 1; j <= n; ++j)
			v[i][j] /= x;
		for (j = 1; j <= n; ++j)
			if (j != i)
				reduce (j, i, v[j][i]);
	}
}

void add(int x, int y, int c) {
	if (x == n)
		return;
	v[x][x]++;
	v[x][n] += c;
	if (y != n)
		v[x][y]--;
}


int main() {
	int i, x, y, c;
	freopen("tunel.out", "w", stdout);
	fin >> n >> m;
	for (i = 1; i <= m; ++i) { 
		fin >> x >> y >> c;
		add(x, y, c);
		add(y, x, c);
	}
	gauss();
	printf ("%.3f", v[1][n]);
	return 0;
}