Cod sursa(job #3372262)

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

#ifndef INF
#define INF 1e9
#endif

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

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

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

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

    for (std::pair<int,long> vec_dist : adj[nod]) {
      int v = vec_dist.first;
      long d = vec_dist.second;

      if (dist[v] == INF) {
        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,INF);
  for (int i = 1; i <= n; i++) {
    int a,b;
    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;
}