Cod sursa(job #1576653)

Utilizator Vertex10Alexandru Pokharel Vertex10 Data 22 ianuarie 2016 18:21:46
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>

using namespace std;
ifstream f ("sate.in");
ofstream g ("sate.out");

int m, n, x, y, vf[200050], lst[200050], urm[200050], cost[200050], nr, coada[30001], dist[30001];
bool viz[30001];

void adauga (int a, int b, int c) //adaug pe a in lista lui b
{
    ++nr;
    vf[nr]=b;
    urm[nr] = lst[a];
    cost[nr] = c;
    lst[a]=nr;
}

int main()
{
    f >> n >> m >> x >> y;
    int a, b, c, p=0, u=1, lung=0;
    bool ok=0;
    for (int i=1; i<=m; ++i)
    {
        f >> a >> b >> c;
        adauga (a, b, c);
        adauga (b, a, c);
    }

    coada[0] = x;
    dist[x] = 0;
    while (p <= u)
    {
        int nod = coada[p];
        int i = lst[nod];
        while (i)
        {
            int j = vf[i]; //j este un nod vecin cu nodul curent "nod"
            if (!viz[j])
            {
                viz[j] = 1;
                if (j > nod)
                    dist[j] = dist[nod] + cost[i];
                else
                    dist[j] = dist[nod] - cost[i];
                coada[++u]=j;
            }
            i = urm[i];
        }
        ++p;
    }
    g << dist[y];
    return 0;
}