Cod sursa(job #2237522)

Utilizator lupulescu2001Lupulescu Vlad lupulescu2001 Data 2 septembrie 2018 03:10:31
Problema Tunelul groazei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<iomanip>
#include<vector>

using namespace std;

ifstream fin("tunel.in");
ofstream fout("tunel.out");

const int Eps=0.000001;
vector <pair <int, int> > G[265];
int N,M;
double A[265][265];

void Constr(){
    for(int i=1;i<N;i++){
        A[i][i]=A[i][i]-G[i].size();
        int K=0;
        for(int j=0;j<G[i].size();j++){
            A[i][G[i][j].first]=A[i][G[i][j].first]+1;
            K=K-G[i][j].second;
        }
        A[i][N+1]=K;
    }
    A[N][N]=1;
}

void Gauss(){
    for(int i=1;i<=N;i++){
        if(A[i][i]>-Eps && A[i][i]<Eps){
            int j=i+1;
            while(A[i][j]>-Eps && A[i][j]<Eps)
                j++;
            swap(A[i],A[j]);
        }
        for(int j=1;j<=N;j++){
            if(i==j)
                continue;
            double K=A[j][i]/A[i][i];
            for(int p=1;p<=N+1;p++)
                A[j][p]=A[j][p]-K*A[i][p];
        }
    }
}

int main(){
    fin>>N>>M;
    for(int i=1;i<=M;i++){
        int X,Y,Z;
        fin>>X>>Y>>Z;
        G[X].push_back(make_pair(Y,Z));
        G[Y].push_back(make_pair(X,Z));
    }
    Constr();
    Gauss();
    fout<<setprecision(3)<<fixed<<A[1][N+1]/A[1][1];
}