Pagini recente » Cod sursa (job #2240780) | Cod sursa (job #2336943) | Cod sursa (job #2336914) | Cod sursa (job #3248044) | Cod sursa (job #121694)
Cod sursa(job #121694)
#include <stdio.h>
#define nm 256
#define eps 1e-10
int n, m, mat[nm][nm], g[nm];
double p[nm][nm], r[nm];
double abs(double val)
{
if (val < 0)
return -val;
return val;
}
int main()
{
freopen("tunel.in", "r", stdin);
freopen("tunel.out", "w", stdout);
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; ++i) {
int x, y, c;
scanf("%d%d%d", &x, &y, &c);
g[x]++; g[y]++;
mat[x][y] += c;
p[x][y]++;
mat[y][x] += c;
p[y][x]++;
}
--n;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n + 1; ++j)
if (i != j) {
r[i] += mat[i][j];
p[i][j] = -p[i][j];
}
p[i][i] = g[i];
}
/*for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j)
printf("%.3lf ", p[i][j]);
printf("%.3lf\n", r[i]);
}*/
for (int i = 1; i <= n; ++i) {
if (p[i][i] == 0) {
for (int j = i + 1; j <= n; ++j)
if (p[j][i]) {
double aux;
for (int k = 1; k <= n; ++k) {
aux = p[i][k];
p[i][k] = p[j][k];
p[j][k] = aux;
}
aux = r[i];
r[i] = r[j];
r[j] = aux;
}
}
for (int j = 1; j <= n; ++j)
if (i != j && abs(p[j][i]) > eps) {
double x = p[i][i] / p[j][i];
for (int k = 1; k <= n; ++k)
p[j][k] = p[j][k] * x - p[i][k];
r[j] = r[j] * x - r[i];
}
/*printf("\n");
for (int j = 1; j <= n; ++j) {
for (int k = 1; k <= n; ++k)
printf("%.3lf ", p[j][k]);
printf("%.3lf\n", r[j]);
}*/
}
printf("%.4lf\n", r[1] / p[1][1]);
return 0;
}