Cod sursa(job #3373688)

Utilizator MrbgdBogdan Mrbgd Data 7 noiembrie 2026 16:39:40
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.27 kb
#include <cstdlib>
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

struct Legatura {
    int vecin;
    int diferenta;
};

int distanta(const vector<vector<Legatura>>& graf, int start, int destinatie) {
    vector<int> pozitie(graf.size());
    vector<char> vizitat(graf.size(), false);
    queue<int> coada;
    coada.push(start);
    vizitat[start] = true;

    while (!coada.empty()) {
        int nod = coada.front();
        coada.pop();
        if (nod == destinatie) {
            return abs(pozitie[nod]);
        }

        for (const Legatura& legatura : graf[nod]) {
            int vecin = legatura.vecin;
            if (!vizitat[vecin]) {
                vizitat[vecin] = true;
                pozitie[vecin] = pozitie[nod] + legatura.diferenta;
                coada.push(vecin);
            }
        }
    }
    return -1;
}

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

    int n, m, x, y;
    intrare >> n >> m >> x >> y;
    vector<vector<Legatura>> graf(n + 1);

    for (int i = 0; i < m; ++i) {
        int stanga, dreapta, d;
        intrare >> stanga >> dreapta >> d;
        graf[stanga].push_back({dreapta, d});
        graf[dreapta].push_back({stanga, -d});
    }

    iesire << distanta(graf, x, y) << '\n';
}