Pagini recente » Cod sursa (job #605565) | Cod sursa (job #348248) | Cod sursa (job #1182239) | Cod sursa (job #42934) | Cod sursa (job #110363)
Cod sursa(job #110363)
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define Nmax 256
const double eps = 10e-8;
int n, m;
int x[Nmax], y[Nmax], cost[Nmax];
int gr[Nmax];
double a[Nmax][Nmax], b[Nmax];
void citire()
{
int i;
scanf("%d %d\n", &n, &m);
for (i = 1; i <= m; ++i)
{
scanf("%d %d %d\n", &x[i], &y[i], &cost[i]);
++gr[x[i]], ++gr[y[i]];
}
}
int is0(double a)
{
return (fabs(a) < eps);
}
void gauss()
{
int i, j, k, ind = 1;
double d;
for (i = 1; i <= n; ++i)
{
if (is0(a[ind][i]))
{
for (j = i; j <= n; ++j)
if (!is0(a[j][i]))
break;
for (k = i; k <= n; ++k)
swap(a[ind][k], a[j][k]);
swap(b[ind], b[j]);
}
d = a[ind][i];
if (is0(d)) continue;
for (j = i; j <= n; ++j)
a[ind][j] /= d;
b[ind] /= d;
for (j = 1; j <= n; ++j)
if (ind != j && !is0(a[j][i]))
{
d = a[j][i];
for (k = i; k <= n; ++k)
a[j][k] -= a[ind][k] * d;
b[j] -= b[ind] * d;
}
++ind;
}
}
void solve()
{
int i;
for (i = 1; i <= n; ++i)
{
a[x[i]][x[i]] = -1;
a[y[i]][y[i]] = -1;
}
for (i = 1; i <= m; ++i)
{
b[x[i]] -= (double)cost[i] / gr[x[i]];
a[x[i]][y[i]] += 1.0 / gr[x[i]];
b[y[i]] -= (double)cost[i] / gr[y[i]];
a[y[i]][x[i]] += 1.0/ gr[y[i]];
}
--n;
gauss();
printf("%lf\n", b[1]);
}
int main()
{
freopen("tunel.in", "r", stdin);
freopen("tunel.out", "w", stdout);
citire();
solve();
return 0;
}