Pagini recente » Cod sursa (job #245156) | Cod sursa (job #2887012) | Cod sursa (job #86308) | Cod sursa (job #3239251) | Cod sursa (job #126163)
Cod sursa(job #126163)
#include <cstdio>
#include <vector>
#define dim 256
using namespace std;
int N;
int M;
double A[dim][dim];
double B[dim];
vector < pair <int, int> > G[dim];
void read()
{
freopen("tunel.in", "rt", stdin);
int i, a, b, c;
for(scanf("%d %d", &N, &M), i=1; i<=M; ++i)
{
scanf("%d %d %d", &a, &b, &c);
G[a].push_back(make_pair(b, c));
G[b].push_back(make_pair(a, c));
}
fclose(stdin);
}
void solve()
{
int i, j, k, n;
double c, t, x;
for(i=1; i<N; ++i)
{
A[i][i] = 1;
x = double (G[i].size());
c = 1 / x;
for(n=G[i].size(), j=0; j<n; ++j)
{
A[i][G[i][j].first] -= c;
B[i] += c * G[i][j].second;
}
}
A[N][N] = 1;
B[N] = 0;
for(j=1; j<=N; ++j)
{
for(i=j; i<=N; ++i)
if(A[i][j]) break;
for(k=1; k<=N; ++k)
{
t = A[i][k];
A[i][k] = A[j][k];
A[j][k] = t;
}
t = B[i];
B[i] = B[j];
B[j] = t;
for(i=1; i<=N; ++i)
if(i != j)
{
c = -A[i][j] / A[j][j];
for(k=1; k<=N; ++k)
A[i][k] += c * A[j][k];
B[i] += c * B[j];
}
}
}
void write()
{
freopen("tunel.out", "wt", stdout);
printf("%lf", B[1]/A[1][1]);
fclose(stdout);
}
int main()
{
read();
solve();
write();
return 0;
}