Pagini recente » Cod sursa (job #1481323) | Cod sursa (job #1804424) | Cod sursa (job #2673911) | Cod sursa (job #619211) | Cod sursa (job #2192872)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 255;
const double EPS = 2e-7;
vector < pair < int, int > > g[MAXN + 1];
double ans[MAXN + 1];
inline int is_null(double val) {
return -EPS < val && val < EPS;
}
int main()
{
int n, m;
ifstream fin("tunel.in");
fin >> n >> m;
for (int i = 0; i < m; ++i) {
int x, y, c;
fin >> x >> y >> c;
g[x].push_back({y, c});
g[y].push_back({x, c});
}
fin.close();
vector < vector < double > > eq(n + 1, vector < double > (n + 2));
eq[n][n] = 1;
for (int i = 1; i < n; ++i) {
eq[i][i] = (int) g[i].size();
for (auto it : g[i]) {
eq[i][it.first] -= 1.0;
eq[i][n + 1] += it.second;
}
}
int i = 1, j = 1;
while (i <= n && j <= n) {
int k = i;
while (k <= n && is_null(eq[k][j]))
++k;
if (k <= n) {
swap(eq[i], eq[k]);
for (k = n + 1; k >= j; --k)
eq[i][k] /= eq[i][j];
for (int e = i + 1; e <= n; ++e)
for (int v = n + 1; v >= j; --v)
eq[e][v] -= eq[e][j] * eq[i][v];
++i;
}
++j;
}
for (i = n; i > 0; --i) {
j = 1;
while (j <= n && is_null(eq[i][j]))
++j;
if (j <= n) {
ans[j] = eq[i][n + 1];
for (int k = j + 1; k <= n; ++k)
ans[j] -= ans[k] * eq[i][k];
}
}
ofstream fout("tunel.out");
fout << setprecision(4) << fixed << ans[1];
fout.close();
return 0;
}