Pagini recente » Borderou de evaluare (job #271010) | Cod sursa (job #2881988) | Cod sursa (job #1311903) | Cod sursa (job #500864) | Cod sursa (job #672903)
Cod sursa(job #672903)
#include<stdio.h>
#define maxn 259
FILE*f=fopen("tunel.in","r");
FILE*g=fopen("tunel.out","w");
int n,m,i,j,k,index,a,b,c;
int gr[maxn];
double A[maxn][maxn],res[maxn];
inline void sisteme () {
fscanf(f,"%d %d",&n,&m);
for ( i = 1 ; i <= m ; ++i ){
fscanf(f,"%d %d %d",&a,&b,&c);
++gr[a]; ++gr[b];
++A[a][b]; ++A[b][a]; A[a][n+1] -= c; A[b][n+1] -= c;
}
for ( i = 1 ; i <= n ; ++i ){
for ( j = 1 ; j <= n + 1 ; ++j ){
A[i][j] /= gr[i];
}
A[i][i] = -1;
}
for ( i = 1 ; i <= n + 1 ; ++i ){
A[n][i] = 0;
}
}
inline bool equal ( double a , double b ){
double dif = a - b;
if ( dif < 0 ) dif = -dif;
if ( dif < 1e-5 ){
return 1;
}
return 0;
}
inline void swap ( double &a , double &b ){
double aux = a; a = b; b = aux;
}
inline void rezolva () {
for ( i = 1 , j = 1 ; i <= n && j <= n ; ){
for ( k = i ; k <= n ; ++k ){
if ( !equal(A[k][j],0.0) ){
break ;
}
}
if ( k == n + 1 ){
++j;
continue ;
}
if ( k != i ){
for ( index = 1 ; index <= n + 1 ; ++index ){
swap(A[i][index],A[k][index]);
}
}
for ( k = j + 1 ; k <= n + 1 ; ++k ){
A[i][k] /= A[i][j];
}
A[i][j] = 1;
for ( index = i + 1 ; index <= n ; ++index ){
double x = A[index][j];
for ( k = j ; k <= n + 1 ; ++k ){
A[index][k] = A[index][k] - x * A[i][k];
}
}
++i; ++j;
}
for ( index = n - 1 ; index >= 1 ; --index ){
for ( i = 1 ; i <= n + 1 ; ++i ){
if ( !equal(A[index][i],0.0) ){
res[index] = A[index][n+1];
for ( j = index + 1 ; j <= n ; ++j ){
res[index] -= res[j] * A[index][j];
}
break ;
}
}
}
fprintf(g,"%lf\n",res[1]);
}
int main () {
sisteme();
rezolva();
fclose(f);
fclose(g);
return 0;
}