Problem p02703 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define len(X) ((int)(X).size())

#ifdef __LOCAL
#define DBG(X) cout << #X << "=" << (X) << '\\n';
#define SAY(X) cout << (X) << '\\n';
#else
#define DBG(X)
#define SAY(X)
#endif

using namespace std;

using ll = long long int;
using ull = unsigned long long int;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int INT_INF = (int)(2e9);
const ll LL_INF = (ll)(2e18);

const int NIL = -1;
static mt19937 _g(time(nullptr));

std::string pad(int num) {
  char buffer[4];
  std::snprintf(buffer, sizeof(buffer), "%03d", num);
  return buffer;
}

inline ll randint(ll a, ll b) {
  ll w = (_g() << 31LL) ^ _g();
  return a + w % (b - a + 1);
}
inline void fast_io() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
};
template <typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); }
template <typename T, typename S>
inline ostream &operator<<(ostream &os, const pair<T, S> p) {
  cout << "[" << p.first << ";" << p.second << "]";
  return os;
}
template <typename T>
inline ostream &operator<<(ostream &os, const vector<T> &v) {
  for (auto el : v)
    cout << el << " ";
  return os;
}
template <typename T> inline T fetch() {
  T ret;
  cin >> ret;
  return ret;
}
template <typename T> inline vector<T> fetch_vec(int sz) {
  vector<T> ret(sz);
  for (auto &elem : ret)
    cin >> elem;
  return ret;
}

#ifdef _MSC_VER
#include <intrin.h>
#define __builtin_popcount __popcnt
#endif

int solve() {
  ll n, m, s;
  cin >> n >> m >> s;

  s = min(s, n * 50);

  vector<vector<tuple<ll, ll, ll>>> graph(n + 1, vector<tuple<ll, ll, ll>>());

  for (int i = 0; i < m; ++i) {
    ll source, dest, time, price;
    cin >> source >> dest >> price >> time;
    graph[source].push_back({time, dest, -price});
    graph[dest].push_back({time, source, -price});
  }

  for (int i = 1; i <= n; ++i) {
    ll change, time;
    cin >> change >> time;
    graph[i].push_back({time, i, change});
  }

  priority_queue<tuple<ll, ll, ll>, vector<tuple<ll, ll, ll>>,
                 greater<tuple<ll, ll, ll>>>
      pq;
  // time, city, silver coins
  pq.push({0, 1, s});

  vector<vector<ll>> dp(n + 1,
                        vector<ll>(n * 50 + 1, std::numeric_limits<ll>::max()));
  dp[1][s] = 0;

  while (!pq.empty()) {
    ll time, city, coins;
    tie(time, city, coins) = pq.top();
    pq.pop();

    for (auto &t : graph[city]) {
      ll tripTime, dest, price;
      tie(tripTime, dest, price) = t;

      ll newCoins = coins + price;
      ll newTime = time + tripTime;

      if (newCoins < 0 || newCoins > n * 50)
        continue;

      if (dp[dest][newCoins] > newTime) {
        dp[dest][newCoins] = newTime;
        pq.push({newTime, dest, newCoins});
      }
    }
  }

  for (int i = 2; i <= n; ++i) {
    ll minTime = std::numeric_limits<ll>::max();

    for (int j = 0; j < n * 50 + 1; ++j)
      minTime = min(minTime, dp[i][j]);

    cout << minTime << '\\n';
  }

  return 0;
}

int main() {
  // cout << solve() << endl;
  solve();

  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define len(X) ((int)(X).size())

#ifdef __LOCAL
#define DBG(X) cout << #X << "=" << (X) << '\\n';
#define SAY(X) cout << (X) << '\\n';
#else
#define DBG(X)
#define SAY(X)
#endif

using namespace std;

using ll = long long int;
using ull = unsigned long long int;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int INT_INF = (int)(2e9);
const ll LL_INF = (ll)(2e18);

const int NIL = -1;
static mt19937 _g(time(nullptr));

std::string pad(int num) {
  char buffer[4];
  std::snprintf(buffer, sizeof(buffer), "%03d", num);
  return buffer;
}

inline ll randint(ll a, ll b) {
  ll w = (_g() << 31LL) ^ _g();
  return a + w % (b - a + 1);
}
inline void fast_io() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
};
template <typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); }
template <typename T, typename S>
inline ostream &operator<<(ostream &os, const pair<T, S> p) {
  cout << "[" << p.first << ";" << p.second << "]";
  return os;
}
template <typename T>
inline ostream &operator<<(ostream &os, const vector<T> &v) {
  for (auto el : v)
    cout << el << " ";
  return os;
}
template <typename T> inline T fetch() {
  T ret;
  cin >> ret;
  return ret;
}
template <typename T> inline vector<T> fetch_vec(int sz) {
  vector<T> ret(sz);
  for (auto &elem : ret)
    cin >> elem;
  return ret;
}

#ifdef _MSC_VER
#include <intrin.h>
#define __builtin_popcount __popcnt
#endif

int solve() {
  ll n, m, s;
  cin >> n >> m >> s;

  s = min(s, n * 50 + 1);

  vector<vector<tuple<ll, ll, ll>>> graph(n + 1, vector<tuple<ll, ll, ll>>());

  for (int i = 0; i < m; ++i) {
    ll source, dest, time, price;
    cin >> source >> dest >> price >> time;
    graph[source].push_back({time, dest, -price});
    graph[dest].push_back({time, source, -price});
  }

  for (int i = 1; i <= n; ++i) {
    ll change, time;
    cin >> change >> time;
    graph[i].push_back({time, i, change});
  }

  priority_queue<tuple<ll, ll, ll>, vector<tuple<ll, ll, ll>>,
                 greater<tuple<ll, ll, ll>>>
      pq;
  // time, city, silver coins
  pq.push({0, 1, s});

  vector<vector<ll>> dp(
      n + 1, vector<ll>(n * 50 + 1, std::numeric_limits<int>::max()));
  dp[1][s] = 0;

  while (!pq.empty()) {
    ll time, city, coins;
    tie(time, city, coins) = pq.top();
    pq.pop();

    for (auto &t : graph[city]) {
      ll tripTime, dest, price;
      tie(tripTime, dest, price) = t;

      ll newCoins = coins + price;
      ll newTime = time + tripTime;

      if (newCoins < 0 || newCoins > n * 50)
        continue;

      if (dp[dest][newCoins] > newTime) {
        dp[dest][newCoins] = newTime;
        pq.push({newTime, dest, newCoins});
      }
    }
  }

  for (int i = 2; i <= n; ++i) {
    ll minTime = std::numeric_limits<int>::max();

    for (int j = 0; j < n * 50 + 1; ++j)
      minTime = min(minTime, dp[i][j]);

    cout << minTime << '\\n';
  }

  return 0;
}

int main() {
  // cout << solve() << endl;
  solve();

  return 0;
}