Cod sursa(job #1697877)

Utilizator panteapaulPantea Paul panteapaul Data 3 mai 2016 02:39:29
Problema Sate Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <deque>
#include <map>

using namespace std;

typedef pair<short,int> paer;

int main()
{
    ifstream in("sate.in");
    ofstream out("sate.out");

    map<short,deque<paer>> vecini;
    map<short,pair<bool,int>> distante;

    short n, x, y, a, b;
    int d, i, m;
    in>>n>>m>>x>>y;

    for (i=0; i<m; i++) {
        in>>a>>b>>d;
        vecini[a].push_back(paer(b,d));
        vecini[b].push_back(paer(a,d));
    }

    deque<short> bf;
    short sat = x;
    distante[sat].first = true;
    bf.push_back(sat);

    while (!bf.empty()) {
        sat = bf.front();
        d = distante[sat].second;
        bf.pop_front();

        for (i=0; i<vecini[sat].size(); i++) {
            if (!distante[vecini[sat][i].first].first) {
                distante[vecini[sat][i].first].first = true;
                if (sat > vecini[sat][i].first) {
                    distante[vecini[sat][i].first].second = d - vecini[sat][i].second;
                }
                else {
                    distante[vecini[sat][i].first].second = d + vecini[sat][i].second;
                }

                bf.push_back(vecini[sat][i].first);
            }
        }
    }

    out<<distante[y].second;

    in.close();
    out.close();
    return 0;
}