Cod sursa(job #3374294)

Utilizator ArcopieBirghilescu Alexandru Arcopie Data 8 noiembrie 2026 22:09:57
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cmath>

using namespace std;

const int N_MAX = 30005;


vector<pair<int, int>> graf[N_MAX]; // vecin,cost

int dist[N_MAX]; // distanta relativa a fiecarui sat fata de satul de start x

bool viz[N_MAX]; // stare de vizitare sat, evit cicluri

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

    int n, m, x, y;
    fin >> n >> m >> x >> y;
    for (int i = 0; i < m; ++i) {
        int st, dr, d;
        fin >> st >> dr >> d;

        // muchie spre dreapta cu cost pozitiv
        graf[st].push_back(make_pair(dr, d));
        // muchie spre stanga cu cost negativ
        graf[dr].push_back(make_pair(st, -d));
    }
    queue<int> coada;

    // start sat x care e si originea(dist =0
    coada.push(x);
    viz[x] = true;
    dist[x] = 0;

    // BFS
    while (!coada.empty()) {
        int nod = coada.front();
        coada.pop();


        if (nod == y) {
            break; //am gasit satu
        }
        for (int i = 0; i < graf[nod].size(); ++i) {
            int v = graf[nod][i].first;  // satul vecin
            int c = graf[nod][i].second; // costul muchiei

            // daca nu am mai calculat distanta pentru acest vecin
            if (!viz[v]) {
                viz[v] = true;
                // actualizam distanta fata de x
                dist[v] = dist[nod] + c;
                // adaugam vecinul in coada pentru a i se explora vecinii mai departe
                coada.push(v);
            }
        }
    }

    fout << abs(dist[y]) << "\n";

    return 0;
}