Cod sursa(job #2727228)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 21 martie 2021 17:34:30
Problema Tunelul groazei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
ifstream f ( "tunel.in" );
ofstream g ( "tunel.out" );
const double EPS = 1e-6;
int N, M;
double X[256], A[256][257];
void gauss()
{
    for ( int i = 1; i < N; i++ )
    {
        for ( int j = i + 1; j <= N + 1; j++ )
            A[i][j] /= A[i][i];

        A[i][i] = 1;

        for ( int j = i + 1; j < N; j++ )
        {
            if ( abs ( A[j][i] ) <= EPS ) continue;

            for ( int k = i + 1; k <= N + 1; k++ )
                A[j][k] -= A[j][i] * A[i][k];

            A[j][i] = 0;
        }
    }
}
void solutie()
{
    for(int i=N+1;i>=1;i--)
    {
        X[i]=A[i][N+1];
        for(int j=i+1;j<N;j++)
            X[i]-=X[j]*A[i][j];
    }
}
int main()
{
    int a, b, c;
    f >> N >> M;

    while ( M-- )
    {
        f >> a >> b >> c;
        A[a][a]++;
        A[b][b]++;
        A[a][b]--;
        A[b][a]--;
        A[a][N + 1] += c;
        A[b][N + 1] += c;
    }

    gauss();
    solutie();
    g << fixed << setprecision ( 3 ) << X[1];
    return 0;
}