Problem p02703 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;

int main() {
  int64_t V, E, s, A = 0;
  cin >> V >> E >> s;
  vector<vector<tuple<int64_t, int64_t, int64_t>>> G(V);
  for (int i = 0; i < E; i++) {
    int64_t a, b, c;
    int64_t d;
    cin >> a >> b >> c >> d;
    a--, b--;
    G.at(a).push_back(make_tuple(b, c, d));
    G.at(b).push_back(make_tuple(a, c, d));
    A = max(A, c);
  }
  vector<vector<int64_t>> r(V, vector<int64_t>(A * V + 1, -1));
  vector<int64_t> z(V, -1);
  vector<pair<int64_t, int64_t>> T(V);
  for (int i = 0; i < V; i++) {
    int64_t c;
    int64_t d;
    cin >> c >> d;
    T.at(i) = make_pair(c, d);
  }
  priority_queue<tuple<int64_t, int64_t, int64_t>,
                 vector<tuple<int64_t, int64_t, int64_t>>,
                 greater<tuple<int64_t, int64_t, int64_t>>>
      pq;
  pq.push(make_tuple(0, 0, s));
  r.at(0).at(s) = 0;
  while (!pq.empty()) {
    int64_t t, a, m;
    tie(t, a, m) = pq.top();
    pq.pop();
    if (r.at(a).at(m) < t) {
      continue;
    }
    if (z.at(a) == -1) {
      z.at(a) = t;
    }
    for (tuple<int64_t, int64_t, int64_t> x : G.at(a)) {
      int64_t b, g, k;
      tie(b, g, k) = x;
      if (m >= g) {
        if (r.at(b).at(m - g) == -1 || r.at(b).at(m - g) > t + k) {
          r.at(b).at(m - g) = t + k;
          pq.push(make_tuple(t + k, b, m - g));
        }
      }
    }
    if (r.at(a).at(min(A * V, m + T.at(a).first)) > t + T.at(a).second ||
        r.at(a).at(min(A * V, m + T.at(a).first)) == -1) {
      r.at(a).at(min(A * V, m + T.at(a).first)) = t + T.at(a).second;
      pq.push(make_tuple(t + T.at(a).second, a, min(A * V, m + T.at(a).first)));
    }
  }
  for (int i = 1; i < V; i++) {
    cout << z.at(i) << endl;
  }
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;

int main() {
  int64_t V, E, s, A = 0;
  cin >> V >> E >> s;
  vector<vector<tuple<int64_t, int64_t, int64_t>>> G(V);
  for (int i = 0; i < E; i++) {
    int64_t a, b, c;
    int64_t d;
    cin >> a >> b >> c >> d;
    a--, b--;
    G.at(a).push_back(make_tuple(b, c, d));
    G.at(b).push_back(make_tuple(a, c, d));
    A = max(A, c);
  }
  vector<vector<int64_t>> r(V, vector<int64_t>(A * V + 1, -1));
  vector<int64_t> z(V, -1);
  vector<pair<int64_t, int64_t>> T(V);
  for (int i = 0; i < V; i++) {
    int64_t c;
    int64_t d;
    cin >> c >> d;
    T.at(i) = make_pair(c, d);
  }
  if (s > A * V) {
    s = A * V;
  }
  priority_queue<tuple<int64_t, int64_t, int64_t>,
                 vector<tuple<int64_t, int64_t, int64_t>>,
                 greater<tuple<int64_t, int64_t, int64_t>>>
      pq;
  pq.push(make_tuple(0, 0, s));
  r.at(0).at(s) = 0;
  while (!pq.empty()) {
    int64_t t, a, m;
    tie(t, a, m) = pq.top();
    pq.pop();
    if (r.at(a).at(m) < t) {
      continue;
    }
    if (z.at(a) == -1) {
      z.at(a) = t;
    }
    for (tuple<int64_t, int64_t, int64_t> x : G.at(a)) {
      int64_t b, g, k;
      tie(b, g, k) = x;
      if (m >= g) {
        if (r.at(b).at(m - g) == -1 || r.at(b).at(m - g) > t + k) {
          r.at(b).at(m - g) = t + k;
          pq.push(make_tuple(t + k, b, m - g));
        }
      }
    }
    if (r.at(a).at(min(A * V, m + T.at(a).first)) > t + T.at(a).second ||
        r.at(a).at(min(A * V, m + T.at(a).first)) == -1) {
      r.at(a).at(min(A * V, m + T.at(a).first)) = t + T.at(a).second;
      pq.push(make_tuple(t + T.at(a).second, a, min(A * V, m + T.at(a).first)));
    }
  }
  for (int i = 1; i < V; i++) {
    cout << z.at(i) << endl;
  }
}