Pagini recente » Cod sursa (job #544216) | Cod sursa (job #549052) | Cod sursa (job #2989590) | Cod sursa (job #2086312) | Cod sursa (job #1795244)
#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>
#define NMAX 103
#define eps 1e-7
using namespace std;
int n, m;
double a[NMAX][NMAX], sol[NMAX];
bool zero (double x)
{
if (x >-eps && x < eps)
return 0;
return 1;
}
vector <int> v[NMAX], co[NMAX];
int main ()
{
int x, y, cost;
ifstream cin ("flux.in");
ofstream cout ("flux.out");
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
cin >> x >> y >> cost;
v[x].push_back(y);
v[y].push_back(x);
co[x].push_back (cost);
co[y].push_back (cost);
}
for (int i = 2; i < n; i++)
{
a[i][i] = v[i].size();
for (int j = 0; j < v[i].size(); j++)
a[i][v[i][j]] -= 1.0;
}
a[1][1] = a[n][n] = a[n][n + 1] = 1.0;
int l = 1, c = 1;
while (l <= n && c <= n)
{
if (zero (a[l][c]) == 0)
{
for (int i = l + 1; i <= n; i++)
if (zero(a[i][c]))
{
swap (a[i],a[l]);
break;
}
}
if (zero(a[l][c]) == 0)
{
c++;
continue;
}
for (int i = 1; i <= n; i++)
{
if (i == l)
continue;
double k = 1.0 * a[i][c] / a[l][c];
for (int j = 1; j <= n + 1; j++)
a[i][j] -= 1.0 * k * a[l][j];
}
l++;
c++;
}
for (int i = 1; i <= n; i++)
sol[i] = a[i][n + 1]* 1.0 / a[i][i];
double kp = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 0 ;j < v[i].size(); j++)
{
kp = max (kp, (sol[v[i][j]] - sol[i])* 1.0 / co[i][j]);
}
}
double s = 0;
for (int j = 0; j < v[n].size(); j++)
s += 1.0 * (sol[n] - sol[v[n][j]])/kp;
// cout << kp;
cout << setprecision(4) << fixed;
cout << s;
return 0;
}