Pagini recente » Cod sursa (job #199534) | Cod sursa (job #2589448) | Cod sursa (job #22636) | Cod sursa (job #619066) | Cod sursa (job #320092)
Cod sursa(job #320092)
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
#define lg 260
#define eps 0.00001
#define a A
int n, m, x, y, z, i, j, k, sm[lg], grd[lg];
double A[lg][lg], aux;
double ab(double a){
return a < 0 ? -a : a;
}
void print(double A[lg][lg]){
for (int i = 1; i <= n; i ++){
for (int j = 1; j <= n+1; j ++)
printf("%lf ", A[i][j]);
printf("\n");
}
printf("\n\n");
}
int main()
{
freopen("tunel.in", "rt", stdin);
freopen("tunel.out", "wt", stdout);
scanf("%d%d", &n, &m);
for (i = 1; i <= m; i ++){
scanf("%d%d%d", &x, &y, &z);
grd[x] ++, grd[y] ++; sm[x] += z, sm[y] += z;
A[x][y] ++, A[y][x] ++;
}
for (i = 1; i < n; i ++){
A[i][n+1] = sm[i] / grd[i];
A[i][n+1] *= -1;
for (j = 1; j <= n; j ++)
A[i][j] /= grd[i];
A[i][i] -= 1;
}
memset(A[n], 0, sizeof(A[n]));
A[n][n] = 1, A[n][n+1] = 0;
//print(A);
for (i = 1; i <= n; i ++){
if (ab(A[i][i]) < eps)
for (j = i; j <= n; j ++)
if (ab(A[j][i]) > eps){
for (k = 1; k <= n+1; k ++)
swap(A[i][k], A[j][k]);
break;
}
if (ab(A[i][i]) < eps)
break;
aux = 1 / A[i][i];
for (j = 1; j <= n+1; j ++)
A[i][j] *= aux;
for (j = 1; j <= n; j ++)
if (i != j){
aux = A[j][i] / A[i][i];
for (k = i; k <= n+1; k ++)
A[j][k] -= aux * A[i][k];
}
}
//print(A);
printf("%.3lf\n", A[1][n+1] / A[1][1]);
return 0;
}