Pagini recente » Cod sursa (job #19591) | Cod sursa (job #3175668) | Cod sursa (job #19590) | Cod sursa (job #1449116) | Cod sursa (job #2178638)
#include <bits/stdc++.h>
#define Nmax 257
#define EPS 1e-6
using namespace std;
ifstream fin("tunel.in");
ofstream fout("tunel.out");
int N, M;
int G[Nmax][Nmax];
int deg[Nmax];
double ans[Nmax], D[Nmax], S[Nmax][Nmax];
int F[Nmax][Nmax];
int main()
{
fin >> N >> M;
while(M--)
{
int x, y, c;
fin >> x >> y >> c;
deg[x]++;
deg[y]++;
G[x][y] += c;
G[y][x] += c;
F[x][y]++;
F[y][x]++;
}
for(int i = 1; i <= N; i++)
{
for(int j = 1; j <= N; j++)
{
if(F[i][j])
S[i][j] = (double)-F[i][j] / deg[i];
ans[i] += G[i][j];
}
ans[i] /= deg[i];
S[i][i] = 1;
}
for(int i = 1; i < N; i++)
for(int j = i + 1; j < N; j++)
if(S[i][i] != 0)
{
double q = S[j][i] / S[i][i];
for(int k = 1; k < N; k++)
{
S[j][k] -= q * S[i][k];
if(abs(S[j][k]) < EPS)
S[j][k] = 0;
}
ans[j] -= q * ans[i];
if(abs(ans[j]) < EPS)
ans[j] = 0;
}
for(int i = N - 1; i >= 1; i--)
{
D[i] = ans[i];
for(int j = i + 1; j < N; j++)
D[i] = D[i] - S[i][j] * D[j];
if(D[i] != 0)
D[i] = D[i] / S[i][i];
}
fout << fixed << setprecision(7) << D[1] << "\n";
return 0;
}