Cod sursa(job #3320406)

Utilizator mateipiratCocu Matei-Iulian mateipirat Data 5 noiembrie 2025 17:41:25
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
using namespace std;

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

int sate(int start, int end, vector<vector<pair<int, int>>>& adj,
         vector<int>& visited, queue<int>& q) {
    q.push(start);
    while (!q.empty()) {
        int node = q.front();
        q.pop();
        for (pair<int, int> neighbor : adj[node]) {
            if (!visited[neighbor.first]) {
                visited[neighbor.first] =
                    visited[node] + neighbor.second;
                if (neighbor.first == end) {
                    return visited[neighbor.first];
                }
                q.push(neighbor.first);
            }
        }
    } 
    return -1; // edge case that should not happen 
}

int main() {
    vector<vector<pair<int, int>>> dist;
    vector<int> visited;
    queue<int> q;
    int n, m, x, y;
    fin >> n >> m >> x >> y;
    dist.resize(n + 1);
    visited.resize(n + 1, 0);
    for (int i = 0; i < m; ++i) {
        int u, v, len;
        fin >> u >> v >> len;
        dist[u].push_back({v, len});
        dist[v].push_back({u, -len});
    }

    fout << sate(x, y, dist, visited, q);
    return 0;
}