Pagini recente » Cod sursa (job #539683) | Cod sursa (job #1319582) | Cod sursa (job #203862) | Cod sursa (job #522784) | Cod sursa (job #1957742)
#include <cstdio>
#include <vector>
#include <algorithm>
#define eps 1e-8
using namespace std;
vector < pair <int, int> > g[260];
int p[260];
double v[260][260];
int main ()
{
freopen ("tunel.in", "r", stdin);
freopen ("tunel.out", "w", stdout);
int n, m;
scanf ("%d %d", &n, &m);
for (int i = 1; i <= m; ++i)
{
int x, y, co;
scanf ("%d %d %d", &x, &y, &co);
g[x].push_back ({y, co});
g[y].push_back ({x, co});
}
for (int i = 1; i <= n; ++i)
{
int grad = g[i].size ();
for (auto &it : g[i])
{
v[i][it.first] += -1.0;
v[i][n + 1] += 1.0 * it.second;
}
v[i][i] = 1.0 * grad;
}
for (int i = 1; i <= n; ++i)
v[i][n] = 0.0;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n; ++j)
if (v[i][j] >= eps || v[i][j] <= -eps)
{
p[i] = j;
break;
}
if (!p[i]) continue;
for (int h = 1; h <= n; ++h)
{
if (h == i || -eps < v[h][p[i]] && v[h][p[i]] < eps) continue;
double rap = v[h][p[i]] / v[i][p[i]];
for (int j = 1; j <= n + 1; ++j)
v[h][j] = v[h][j] - rap * v[i][j];
}
}
printf ("%.5f\n", v[1][n + 1] / v[1][1]);
return 0;
}