Cod sursa(job #2963252)

Utilizator rastervcrastervc rastervc Data 10 ianuarie 2023 17:08:10
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#include <vector>
#include <queue>

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

constexpr std::size_t LIM = 3 * 1e4 + 1;

struct AdjNode {
    int node, weight;
    AdjNode() noexcept : node(), weight() {}
    AdjNode(int node, int weight) noexcept 
        : node(node), weight(weight) {}
};

int N, M, X, Y, i, node1, node2, weight;
std::vector<AdjNode> adj_list[LIM];
int distance[LIM];
bool visited[LIM];

static inline void bfs(int start_node) {
    std::queue<int> queue;
    queue.push(start_node);
    visited[start_node] = true;

    while (!queue.empty()) {
        const int node = queue.front();
        queue.pop();
        for (const AdjNode& adj : adj_list[node])
            if (!visited[adj.node]) {
                if (adj.node < node)
                    distance[adj.node] = distance[node] - adj.weight;
                else distance[adj.node] = distance[node] + adj.weight;

                visited[adj.node] = true;
                queue.push(adj.node);
            }
    }
}

int main() {
    fin >> N >> M >> X >> Y;
    for (i = 1; i <= M; ++i) {
        fin >> node1 >> node2 >> weight;
        adj_list[node1].emplace_back(node2, weight);
        adj_list[node2].emplace_back(node1, weight);
    }

    bfs(X);

    fout << distance[Y];

    fin.close();
    fout.close();
    return 0;
}