Cod sursa(job #2919597)

Utilizator stefantagaTaga Stefan stefantaga Data 18 august 2022 13:44:35
Problema Tunelul groazei Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
/*
    Complexitate : O(N^3)
    Scor : Sper ca 100p
*/
#include <bits/stdc++.h>

using namespace std;
ifstream f("tunel.in");
ofstream g("tunel.out");
double e[260][260];
const double eps = 1e-6;
int n,m,x,y,c,i,sal[260],j;
vector <int> v[260];
int main()
{
    f>>n>>m;
    for (i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        v[x].push_back(y);
        v[y].push_back(x);
        sal[x]+=c;
        sal[y]+=c;
    }
    for (i=1;i<=n-1;i++)
    {
        e[i][i] = v[i].size();
        for (j=0;j<v[i].size();j++)
        {
            e[i][v[i][j]]--;
        }
        e[i][n] = sal[i];
    }
    for (i=1;i<=n-1;i++)
    {
        int poz =0;
        for (j=1;j<=n;j++)
        {
            if (e[i][j]<-eps||e[i][j]>eps)
            {
                poz=j;
                break;
            }
        }
        if (poz==0)
        {
            continue;
        }
        for (j=1;j<=n;j++)
        {
            if (i!=j&& (e[j][poz]<-eps||e[j][poz]>eps))
            {
                long double coef = e[j][poz]/e[i][poz];
                for (int t=1;t<=n;t++)
                {
                    e[j][t] = e[j][t]-coef*e[i][t];
                }
            }
        }
    }
    for (i=1;i<=n-1;i++)
    {
        if (e[i][1])
        {
            g<<setprecision(6)<<fixed<<e[i][n]/e[i][1]<<'\n';
            break;
        }
    }
    return 0;
}