Pagini recente » Cod sursa (job #1292282) | Cod sursa (job #1292509) | Cod sursa (job #54656) | Cod sursa (job #1101834) | Cod sursa (job #1583671)
#include <stdio.h>
#define MAXN 255
#define MAXM 100000
#define EPS 0.0000001
double nr[MAXN], a[MAXN][MAXN + 1];
int ult[MAXN], nod[2 * MAXM], next[2 * MAXM], timp[2 * MAXM];
inline int cmp(double a, double b){
if(a - b > EPS)
return 1;
if(b - a > EPS)
return -1;
return 0;
}
inline void gauss(int n){
int i, j, k, l;
double aux;
for(i = 0, j = 0; i < n - 1; i++, j++){
k = i;
while(k < n - 1 && cmp(a[k][j], 0) == 0)
k++;
if(k < n - 1){
for(l = 0; l <= n; l++){
aux = a[i][l]; a[i][l] = a[k][l]; a[k][l] = aux;
}
for(k = j + 1; k <= n; k++)
a[i][k] /= a[i][j];
a[i][j] = 1;
for(k = i + 1; k < n - 1; k++){
for(l = j + 1; l <= n; l++){
a[k][l] -= a[i][l] * a[k][j];
}
}
}
}
for(i = n - 2; i >= 0; i--){
for(j = n; j > i; j--){
a[i][n] -= nr[j] * a[i][j];
}
nr[i] = a[i][n] / a[i][j];
}
}
int main(){
FILE *in = fopen("tunel.in", "r");
int n, m, i, x, y, z, d = 0;
fscanf(in, "%d%d", &n, &m);
memset(ult, -1, sizeof ult);
for(i = 0; i < m; i++){
fscanf(in, "%d%d%d", &x, &y, &z);
x--; y--;
nod[d] = x;
next[d] = ult[y];
timp[d] = z;
ult[y] = d;
d++;
nod[d] = y;
next[d] = ult[x];
timp[d] = z;
ult[x] = d;
d++;
}
fclose(in);
int poz, k;
for(i = 0; i < n - 1; i++){
poz = ult[i];
k = 0;
while(poz != -1){
a[i][nod[poz]]++;
a[i][n] -= timp[poz];
k++;
poz = next[poz];
}
a[i][i] = -k;
}
gauss(n);
FILE *out = fopen("tunel.out", "w");
fprintf(out, "%lf", nr[0]);
fclose(out);
return 0;
}