Cod sursa(job #3372264)

Utilizator FilipbosBogdan Filip Filipbos Data 2 noiembrie 2026 21:38:52
Problema Sate Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>

std::ifstream f("sate.in");
std::ofstream g("sate.out");

std::vector<std::vector<std::pair<int, long long>>> adj; // lista de adiacenta, {vecin,distanta}
std::vector<long long> dist; //distanta de la nodul X la oricare nod
std::vector<bool> viz;

void BFS(int start,int dest) {
  std::queue<int> q;
  q.push(start);
  viz[start] = true;

  while (!q.empty()) {
    int nod = q.front();
    q.pop(); // extragem primul elem

    for (auto vec_dist : adj[nod]) {
      int v = vec_dist.first;
      long long d = vec_dist.second;

      if (!viz[v]) {
        viz[v] = true;
        q.push(v);
        dist[v] = dist[nod] + d; // daca nodul e dupa,adaugam distanta,altfel scadem
      }
    }
  }
}

int main() {
  int n, m, x, y;
  f >> n >> m >> x >> y;

  adj.resize(n + 1);
  dist.resize(n + 1);
  viz.resize(n + 1);

  for (int i = 1; i <= m; i++) {
    int a,b;
    long long c;
    f >> a >> b >> c;
    adj[a].emplace_back(b,c);
    adj[b].emplace_back(a,-c);
  }

  if (x == y) // cazul in care start == dest
    g << 0;
  else {
    BFS(x,y);
    g << abs(dist[y]); // distanta de la x la y
  }
  return 0;
}