Cod sursa(job #3371915)

Utilizator mar_parapeanumaria parapeanu mar_parapeanu Data 1 noiembrie 2026 18:50:19
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <vector>
#include <queue>

std::ifstream fin("sate.in");
std::ofstream fout("sate.out");

struct vecinDist {
    int vecin, distanta;
};

int main() {
    int n, m, x, y;
    std::queue<int> queue;
    fin >> n >> m >> x >> y;
    std::vector<std::vector<vecinDist>> graph(n+1);
    std::vector<int> distances(n+1, 0);
    std::vector<int> visited(n+1, 0);

    int nodeBegin, nodeReach, distance;
    while (m > 0) {
        fin >> nodeBegin >> nodeReach >> distance;
        graph[nodeBegin].push_back(vecinDist{nodeReach, distance});
        graph[nodeReach].push_back((vecinDist{nodeBegin, distance}));
        m--;
    }

    queue.push(x);
    distances[x] = 0;
    visited[x] = 1;
    while (!queue.empty()) {
        int crt = queue.front();
        queue.pop();
        for (auto p : graph[crt]) {
            if (visited[p.vecin] == 0) {
                visited[p.vecin] = 1;
                queue.push(p.vecin);
                if (p.vecin > crt) {
                    distances[p.vecin] = distances[crt] + p.distanta;
                }
                else if (p.vecin < crt) {
                    distances[p.vecin] = distances[crt] - p.distanta;
                }
            }
        }
    }

    if (distances[y] != 0)
        fout << std::abs(distances[y]);
}