Pagini recente » Cod sursa (job #850254) | Cod sursa (job #1537474) | Cod sursa (job #3246094) | Cod sursa (job #1542086) | Cod sursa (job #1795201)
#include <iostream>
#include <fstream>
#define eps 0.0000001
#define NMAX 260
#include <iomanip>
#include <vector>
using namespace std;
double a[NMAX][NMAX];
bool zero (double x)
{
if (x > -eps && x < eps)
return 0;
return 1;
}
int n, m;
vector <int> v[NMAX];
vector <int> c[NMAX];
int main ()
{
int x, y, cost;
ifstream cin ("tunel.in");
ofstream cout ("tunel.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);
c[x].push_back(cost);
c[y].push_back(cost);
}
for (int i = 1; i <= n; i++)
{
int sum = 0;
for (int j = 0; j < v[i].size(); j++)
{
a[i][v[i][j]] = 1.0;
sum += -c[i][j];
}
a[i][i] = v[i].size();
a[i][i] = - a[i][i];
a[i][n + 1] = sum;
}
int l = 1, c = 1;
/* for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
cout << a[i][j] << " " ;
cout << "\n";
}*/
while (l <= n && c <= n)
{
if (zero(a[l][c]) == 0)
{
for (int i = l + 1; i <= n; i++)
{
if (zero(a[i][c]) != 0)
{
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 = 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++;
}
cout << setprecision(4) << fixed;
cout << setprecision(4) << a[1][n + 1] * 1.0 / a[1][1];
return 0;
}