Cod sursa(job #709358)

Utilizator mihai995mihai995 mihai995 Data 8 martie 2012 00:07:09
Problema Tunelul groazei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <cstdio>
using namespace std;

const int N=261;
double v[N][N];
int n;

ifstream in("tunel.in");

void reduce(double a[],double b[],double x)
{
    for (int i=1;i<=n;i++)
        a[i]-=b[i]*x;
}

double gauss()
{
    double x;
    for (int i=1;i<n;i++)
    {
        x=v[i][i];
        for (int j=1;j<=n;j++)
            v[i][j]/=x;
        for (int j=1;j<=n;j++)
            if (i!=j)
                reduce(v[j],v[i],v[j][i]);
    }
    return v[1][n];
}

void work(int x,int y,int c)
{
    if (x==n)
        return;
    v[x][x]++;
    v[x][n]+=c;
    if (y!=n)
        v[x][y]--;
}

int main()
{
    freopen("tunel.out","w",stdout);
    int m,x,y,c;
    in>>n>>m;
    while (m--)
    {
        in>>x>>y>>c;
        work(x,y,c);
        work(y,x,c);
    }
    printf("%.6lf\n",gauss());
    return 0;
}