Cod sursa(job #2550767)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 19 februarie 2020 09:33:28
Problema Sate Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 30005;

vector<pair<int, int> >G[MAXN];
int dist[MAXN];
int vis[MAXN];

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 <= n; ++i) {
    int u, v, c;
    scanf("%d%d%d", &u, &v, &c);
    G[u].push_back({v, c});
    G[v].push_back({u, c});
  }

  queue<int>q;
  q.push(x);
  vis[1] = 1;
  while (!q.empty()) {
    int node = q.front();
    q.pop();
    for (auto it:G[node])
      if (vis[it.first] == 0) {
        vis[it.first] = 1;
        if (it.first > node)
          dist[it.first] = dist[node] + it.second;
        else
          dist[it.first] = dist[node] - it.second;
        q.push(it.first);
      }
  }

  printf("%d\n", abs(dist[y]));

  return 0;
}