Cod sursa(job #615754)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 10 octombrie 2011 19:00:44
Problema Tunelul groazei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>

using namespace std;

#define maxn 256

int n, m, a, b, c, k;
double v[maxn][maxn];

int main()
{
    freopen("tunel.in", "r", stdin);
    freopen("tunel.out", "w", stdout);

    scanf("%d%d", &n, &m);
    for(int i=1; i<=m; ++i)
    {
        scanf("%d%d%d", &a, &b, &c);
        ++v[a][a]; ++v[b][b];
        --v[a][b]; --v[b][a];
        v[a][n+1]+=c; v[b][n+1]+=c;
    }

    for(int i=1; i<=n+1; ++i)
        v[n][i]=0;
    v[n][n]=1;

    for(int i=1, j=1; i<=n && j<=n;)
    {
        for(int l=j+1; l<=n+1; ++l)
            v[i][l] = v[i][l] / v[i][j];
        v[i][j] = 1;

        for(int u=1; u<=n; ++u)
        {
            if(u==i)
                continue;
            for(int l=j+1; l<=n+1; ++l)
                v[u][l] -= v[u][j] * v[i][l];
            v[u][j] = 0;
        }

        ++i; ++j;
    }

    printf("%.4lf\n", v[1][n+1]/v[1][1]);

    return 0;
}