Cod sursa(job #3375007)

Utilizator RapiesNechifor Rares-Gabriel Rapies Data 9 noiembrie 2026 22:30:38
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MAXN = 30005;
const int MAXM = 200055;

int head[MAXN], to[MAXM], weight[MAXM], nxt[MAXM], edge_cnt;
int dist_node[MAXN];
bool vis[MAXN];

void add_edge(int u, int v, int w) {
    to[++edge_cnt] = v;
    weight[edge_cnt] = w;
    nxt[edge_cnt] = head[u];
    head[u] = edge_cnt;
}

int main() {

    int n, m, x, y;
    fin >> n >> m >> x >> y;

    for (int k = 0; k < m; ++k) {
        int i, j, d;
        fin >> i >> j >> d;
        add_edge(i, j, d);
        add_edge(j, i, -d);
    }

    queue<int> q;
    q.push(x);
    vis[x] = true;
    dist_node[x] = 0;

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

        if (u == y) break;

        for (int e = head[u]; e != 0; e = nxt[e]) {
            int v = to[e];
            if (!vis[v]) {
                vis[v] = true;
                dist_node[v] = dist_node[u] + weight[e];
                q.push(v);
            }
        }
    }

    fout << abs(dist_node[y]) << "\n";
    return 0;
}