Pagini recente » Cod sursa (job #1749395) | Cod sursa (job #884798) | Cod sursa (job #2499693) | Cod sursa (job #2683068) | Cod sursa (job #1883432)
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,p,c, gr[270],v[270][270];
double rap,ras,sum,dist[270][270],ec[270][270];
double mod(double x) { return x > 0 ? x : -x; }
double eps = 1e-7;
int main ()
{
freopen ("tunel.in", "r", stdin);
freopen ("tunel.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++)
{
scanf ("%d %d %d", &x, &y, &c);
dist[x][y] = c*1.0;
dist[y][x] = c*1.0;
gr[x] ++;
gr[y] ++;
v[x][gr[x]] = y;
v[y][gr[y]] = x;
}
///x[i] = suma(d[i][j] +x[j]) * (1/gr[i])
/// x[i] * gr[i] = suma(x[j]) + suma(d[i][j])
/// -suma(d[i][j]) = -x[i] * gr[i] + suma(x[j])
for (int i = 1; i <= n-1; i++)
{
sum=0;
for (int j = 1; j <= gr[i]; j++)
{
ec[i][v[i][j]] -= 1.0;
sum += dist[i][v[i][j]];
}
ec[i][n] = sum*1.0;
ec[i][i] = gr[i]*1.0;
}
for (int i = 1; i < n; i++)
{
for(p = 1; p < n; p++)
if(mod (ec[i][p]) > eps) break;
rap = 0;
for (int j = 1; j < n; j++)
if(j != i && mod ( ec[j][p] ) > eps)
{
rap = (double) ec[j][p] / ec[i][p];
for ( int k = 1; k <= n; k++)
ec[j][k] = (double) ec[j][k] - ec[i][k] * rap;
}
}
for(int i = 1; i <= n; i++)
if(mod(ec[i][1]) > eps)
{
ras = (double) ec[i][n] / ec[i][1];
break;
}
printf("%.3lf\n", ras);
return 0;
}