Cod sursa(job #1322173)

Utilizator lacraruraduRadu Matei Lacraru lacraruradu Data 19 ianuarie 2015 20:23:17
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

ifstream in("sate.in");
ofstream out("sate.out");

const int N = 30001;

int n, m, x, y;
int cost[N];
queue <int> q;

struct vecin
{
    int nod, dst;
};
vector <vecin> a[N];

void citire()
{
    in >> n >> m >> x >> y;

    for(int i = 1; i <= m; i++)
    {
        int k, l, d;
        in >> k >> l >> d;

        vecin aux;

        aux.nod = l;
        aux.dst = d;
        a[k].push_back(aux);

        aux.nod = k;
        a[l].push_back(aux);
    }
}

int main()
{
    citire();

    for(int i = 1; i <= n; i++)
        cost[i] = -1;

    if(x > y)
    {
        int aux = x;
        x = y;
        y = aux;
    }

    cost[x] = 0;
    q.push(x);

    while(!q.empty())
    {
        int k = q.front();
        q.pop();

        for(size_t i = 0; i < a[k].size(); i++)
        {
            int l = a[k][i].nod;
            int d = a[k][i].dst;

            if(cost[l] == -1)
            {
                if(k < l)
                    cost[l] = cost[k] + d;
                else
                    cost[l] = cost[k] - d;

                q.push(l);
            }
        }
    }

    out << cost[y] << '\n';
    return 0;
}