Cod sursa(job #3374985)

Utilizator teoo.mnlManolescu Teodor teoo.mnl Data 9 noiembrie 2026 21:50:31
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
// sate

#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

const int MAXN = 30005;

// Graful va reține perechi de tipul {vecin, cost_muchie}
vector<pair<int, int>> adj[MAXN];
bool vizitat[MAXN];
int dist[MAXN];

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

    int N, M, X, Y;
    fin >> N >> M >> X >> Y;

    for (int k = 0; k < M; ++k) {
        int u, v, d;
        fin >> u >> v >> d;
        
        // Adăugăm muchia directă (cost pozitiv)
        adj[u].push_back({v, d});
        // Adăugăm muchia inversă (cost negativ)
        adj[v].push_back({u, -d});
    }

    // Parcurgere BFS plecând din X
    queue<int> q;
    q.push(X);
    vizitat[X] = true;
    dist[X] = 0;

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

        // Dacă am ajuns la satul căutat, ne putem opri
        if (u == Y) {
            break;
        }

        for (auto muchie : adj[u]) {
            int v = muchie.first;
            int cost = muchie.second;

            if (!vizitat[v]) {
                vizitat[v] = true;
                dist[v] = dist[u] + cost;
                q.push(v);
            }
        }
    }

    fout << dist[Y] << "\n";

    return 0;
}

// alice 2