Pagini recente » Cod sursa (job #102555) | Cod sursa (job #446504) | Cod sursa (job #79546) | Cod sursa (job #122129) | Cod sursa (job #2419954)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 255;
const double eps = 1e-8;
struct Edge {
int u, c;
};
int gr[MAXN + 5];
vector<Edge>G[MAXN + 5];
double a[MAXN + 5][MAXN + 5];
double solve(int n) {
int l = 1, p = 1;
for (int i = 1; i < n && l < n; ++i) {
int pos = l;
for (int j = l + 1; j < n; ++j)
if (fabs(a[j][i]) > fabs(a[pos][i]))
pos = j;
if (fabs(a[pos][i]) < eps)
continue;
for (int j = 1; j <= n; ++j)
swap(a[l][j], a[pos][j]);
double coef = 1. / a[l][i];
for (int j = i; j <= n; ++j)
a[l][j] *= coef;
for (int j = 1; j < n; ++j)
if (j != l) {
coef = a[j][i];
for (int t = 1; t <= n; ++t)
a[j][t] -= coef * a[l][t];
}
if (i == 1)
p = l;
l++;
}
return a[p][n];
}
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 u, v, c;
scanf("%d%d%d", &u, &v, &c);
G[u].push_back({v, c});
G[v].push_back({u, c});
gr[u]++;
gr[v]++;
}
for (int i = 1; i < n; ++i) {
a[i][i] = gr[i];
for (auto it:G[i]) {
a[i][n] += it.c;
if (it.u != n)
a[i][it.u]--;
}
}
printf("%.6f", solve(n));
return 0;
}