Pagini recente » Cod sursa (job #289749) | Cod sursa (job #619230) | Cod sursa (job #2292931) | Cod sursa (job #18083) | Cod sursa (job #362600)
Cod sursa(job #362600)
#include <cstdio>
#define Nmax 260
int n, m, i, j, a, b, c, k;
int V[Nmax][Nmax], grad[Nmax];
double cc;
double D[Nmax], G[Nmax][Nmax], X[Nmax];
void citire () {
FILE *f = fopen ("tunel.in", "r");
fscanf (f, "%d %d", &n, &m);
for (i = 1; i <= m; i++) {
fscanf (f, "%d %d %d", &a, &b, &c);
V[a][b]++; V[b][a]++; grad[a]++; grad[b]++;
D[a]+= c; D[b]+=c;
}
fclose (f);
}
void solve () {
// grad[nod] * x[nod] - V[nod][fiu1] * x[fiu1] - ... - V[nodk][fiu] * x[fiuk] = D[nod];
for (i = n - 1; i >= 1; i--) {
for (j = 1; j < n; j++)
G[i][j] = -V[i][j];
G[i][i] = grad[i];
}
for (i = 1; i < n; i++)
for (j = i+1; j < n; j++)
if (G[j][i] ) { // G[i][i] != 0 (grad[i] != 0)
cc = - G[i][i] / G[j][i];
for (k = i; k < n; k++) {
G[j][k] = G[j][k] * cc + G[i][k];
}
D[j] = D[j] * cc + D[i];
}
X[n-1] = D[n-1] / G[n-1][n-1];
for (i = n-2; i >= 1; i--) {
cc = 0;
for (j = i + 1; j < n; j++)
cc+= G[i][j] * X[j];
X[i] = (D[i] - cc) / G[i][i];
}
}
int main () {
citire ();
solve ();
FILE *g = fopen ("tunel.out", "w");
fprintf (g, "%lf", X[1]);
fclose (g);
return 0;
}