Cod sursa(job #2550801)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 19 februarie 2020 09:57:32
Problema Sate Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <queue>
#include <vector>

using namespace std;

const int MAX_N = 30000;

struct Edge {
  int u;
  int cost;
};

bool vis[1 + MAX_N];
vector<Edge> g[1 + MAX_N];
int dist[1 + MAX_N];

void bfs(int start) {
  queue<int> q;

  q.push(start);
  vis[start] = true;
  dist[start] = 0;

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

    for (auto e : g[node]) {
      int u, cost;

      u = e.u;
      cost = e.cost;

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

int main() {
  freopen("sate.in", "r", stdin);
  freopen("sate.out", "w", stdout);

  int n, m, x, y;

  scanf("%d%d%d%d", &n, &m, &x, &y);

  for (int i = 1; i <= m; i++) {
    int u, v, cost;

    scanf("%d%d%d", &u, &v, &cost);

    g[u].push_back({v, cost});
    g[v].push_back({u, -cost});
  }

  bfs(x);

  printf("%d\n", dist[y]);
  return 0;
}