Pagini recente » Cod sursa (job #16801) | Cod sursa (job #2767610) | Cod sursa (job #3266992) | Cod sursa (job #2767612) | Cod sursa (job #106439)
Cod sursa(job #106439)
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define MAXN 301
double E[MAXN][MAXN];
double X[MAXN];
int N, M, C[MAXN][MAXN], g[MAXN];
void solve(void)
{
int i, j, k;
double coef, val;
for(i = 1; i < N; i++)
{
for(j = i+1; j < N; j++)
for(coef = -E[j][i]/E[i][i], k = i; k <= N; k++)
E[j][k] += coef*E[i][k];
}
for(i = N-1; i >= 1; i--)
{
for(val = E[i][N], j = i+1; j < N; j++)
val = val - E[i][j]*X[j];
X[i] = val / E[i][i];
}
}
void read_data(void)
{
int i, j, k, a, b, c;
scanf("%d %d\n", &N, &M);
for(i = 1; i <= M; i++)
scanf("%d %d %d\n", &a, &b, &c),
C[a][b] += c, C[b][a] += c, g[b]++, g[a]++;
for(i = 1; i < N; i++)
{
for(E[i][i] = -1.0, j = 1; j < N; j++)
if(j != i && C[i][j] > 0)
E[i][j] = (double)1/g[i];
for(j = 1; j <= N; j++)
E[i][N] -= 1.0/g[i]*C[i][j];
}
}
void write_data(void)
{
printf("%.3lf\n", X[1]);
}
int main(void)
{
freopen("tunel.in", "rt", stdin);
freopen("tunel.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}