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

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define FOR(i, a, b) for (int i = (a); i < int(b); ++i)
#define RFOR(i, a, b) for (int i = (b)-1; i >= int(a); --i)
#define rep(i, n) FOR(i, 0, n)
#define rep1(i, n) FOR(i, 1, int(n) + 1)
#define rrep(i, n) RFOR(i, 0, n)
#define rrep1(i, n) RFOR(i, 1, int(n) + 1)
#define all(c) begin(c), end(c)
const int MOD = 1000000007;

template <typename T> void __dump__(std::ostream &os, const T &first) {
  os << first;
}
template <typename First, typename... Rest>
void __dump__(std::ostream &os, const First &first, const Rest &...rest) {
  os << first << ", ";
  __dump__(os, rest...);
}
#define dump(...)                                                              \\
  do {                                                                         \\
    std::ostringstream os;                                                     \\
    os << __LINE__ << ":\\t" << #__VA_ARGS__ << " = ";                          \\
    __dump__(os, __VA_ARGS__);                                                 \\
    std::cerr << os.str() << std::endl;                                        \\
  } while (0)

using P = complex<double>;
P ps[21];

const double EPS = 1e-9;
const double INF = 1e9;
vector<int> go[21][21];
double dp[10001][21][21];
double d[21][21];

int main() {
  int n;
  double r, th;
  cin >> n >> r >> th;
  th = th * acos(-1) / 180;
  rep(i, n) {
    int x, y;
    cin >> x >> y;
    ps[i] = P(x, y);
  }
  rep(i, n) rep(j, n) {
    if (i == j)
      continue;
    go[i][j].clear();
    rep(k, n) {
      if (j == k)
        continue;
      double phi = arg((ps[k] - ps[j]) / (ps[j] - ps[i]));
      if (abs(phi) <= th + EPS) {
        go[i][j].push_back(k);
        // dump(i, j, k);
      }
    }
    d[i][j] = abs(ps[i] - ps[j]);
  }
  rep(i, 10001) rep(j, 21) rep(k, 21) dp[i][j][k] = INF;
  rep(i, n) if (i && d[0][i] <= r + EPS) dp[1][0][i] = d[0][i];
  FOR(i, 1, 10001) {
    rep(j, n) rep(k, n) {
      if (dp[i][j][k] == INF)
        continue;
      for (auto &l : go[j][k]) {
        dp[i + 1][k][l] = min(dp[i + 1][k][l], dp[i][j][k] + d[k][l]);
      }
    }
  }
  double ans = 0;
  rrep(i, 10001) rep(j, n) rep(k, n) {
    if (dp[i][j][k] <= r + EPS) {
      // dump(i, j, k);
      ans = i;
      goto END;
    }
  }
END:;
  cout << ans << endl;
}

Error: 0
75:	i, j, k = 10, 1, 4


Fixed submission:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define FOR(i, a, b) for (int i = (a); i < int(b); ++i)
#define RFOR(i, a, b) for (int i = (b)-1; i >= int(a); --i)
#define rep(i, n) FOR(i, 0, n)
#define rep1(i, n) FOR(i, 1, int(n) + 1)
#define rrep(i, n) RFOR(i, 0, n)
#define rrep1(i, n) RFOR(i, 1, int(n) + 1)
#define all(c) begin(c), end(c)
const int MOD = 1000000007;

template <typename T> void __dump__(std::ostream &os, const T &first) {
  os << first;
}
template <typename First, typename... Rest>
void __dump__(std::ostream &os, const First &first, const Rest &...rest) {
  os << first << ", ";
  __dump__(os, rest...);
}
#define dump(...)                                                              \\
  do {                                                                         \\
    std::ostringstream os;                                                     \\
    os << __LINE__ << ":\\t" << #__VA_ARGS__ << " = ";                          \\
    __dump__(os, __VA_ARGS__);                                                 \\
    std::cerr << os.str() << std::endl;                                        \\
  } while (0)

using P = complex<double>;
P ps[21];

const double EPS = 1e-9;
const double INF = 1e9;
vector<int> go[21][21];
double dp[10001][21][21];
double d[21][21];

int main() {
  int n;
  double r, th;
  cin >> n >> r >> th;
  th = r * acos(-1) / 180;
  rep(i, n) {
    int x, y;
    cin >> x >> y;
    ps[i] = P(x, y);
  }
  rep(i, n) rep(j, n) {
    if (i == j)
      continue;
    go[i][j].clear();
    rep(k, n) {
      if (j == k)
        continue;
      double phi = arg((ps[k] - ps[j]) / (ps[j] - ps[i]));
      if (abs(phi) <= th + EPS) {
        go[i][j].push_back(k);
        // dump(i, j, k);
      }
    }
    d[i][j] = abs(ps[i] - ps[j]);
  }
  rep(i, 10001) rep(j, 21) rep(k, 21) dp[i][j][k] = INF;
  rep(i, n) if (i && d[0][i] <= r + EPS) dp[1][0][i] = d[0][i];
  FOR(i, 1, 10001) {
    rep(j, n) rep(k, n) {
      if (dp[i][j][k] == INF)
        continue;
      for (auto &l : go[j][k]) {
        dp[i + 1][k][l] = min(dp[i + 1][k][l], dp[i][j][k] + d[k][l]);
      }
    }
  }
  double ans = 0;
  rrep(i, 10001) rep(j, n) rep(k, n) {
    if (dp[i][j][k] <= r + EPS) {
      dump(i, j, k);
      ans = i;
      goto END;
    }
  }
END:;
  cout << ans << endl;
}