Cod sursa(job #3371939)

Utilizator david18.6yDavid Popa david18.6y Data 1 noiembrie 2026 20:53:37
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <cstdlib>

const int MAXN = 30005;
const int MAXM = 100030;

int head[MAXN], nxt[2 * MAXM], to[2 * MAXM], w[2 * MAXM], cnt;
int q[MAXN], dist_X[MAXN];
bool vizitat[MAXN];

int main() {
    freopen("sate.in", "r", stdin);
    freopen("sate.out", "w", stdout);

    int N, M, X, Y;
    scanf("%d %d %d %d", &N, &M, &X, &Y);

    for (int i = 1; i <= N; i++) {
        head[i] = -1;
        dist_X[i] = -1;
    }

    for (int k = 0; k < M; k++) {
        int i, j, D;
        scanf("%d %d %d", &i, &j, &D);
        to[cnt] = j; w[cnt] = D;  nxt[cnt] = head[i]; head[i] = cnt++;   // lista[i].append((j, D))
        to[cnt] = i; w[cnt] = -D; nxt[cnt] = head[j]; head[j] = cnt++;   // lista[j].append((i, -D))
    }

    dist_X[X] = 0;
    vizitat[X] = true;
    int h = 0, t = 0;
    q[t++] = X;
    while (h < t) {
        int nod = q[h++];
        for (int e = head[nod]; e != -1; e = nxt[e]) {
            int vecin = to[e], d = w[e];
            if (!vizitat[vecin]) {
                vizitat[vecin] = true;
                dist_X[vecin] = dist_X[nod] + d;
                q[t++] = vecin;
            }
        }
    }

    printf("%d\n", abs(dist_X[Y]));
    return 0;
}