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

#include <bits/stdc++.h> //g++-9で実行（gcc version 9.3.0），g++だとデフォルトのclang

using namespace std;

// #define int long long //intでオーバフローした時の切り替え用
#define debug(x)                                                               \\
  cerr << #x << ": " << x << endl // エラー出力として変数名と変数の中身表示
#define DEBUG_VEC(v)                                                           \\
  cerr << #v << ":";                                                           \\
  for (int i = 0; i < v.size(); i++)                                           \\
    cerr << " " << v[i];                                                       \\
  cerr << endl;
#define DEBUG_MAT(v)                                                           \\
  cerr << #v << endl;                                                          \\
  for (int i = 0; i < v.size(); i++) {                                         \\
    for (int j = 0; j < v[i].size(); j++) {                                    \\
      cerr << v[i][j] << " ";                                                  \\
    }                                                                          \\
    cerr << endl;                                                              \\
  }
#define Sp(p)                                                                  \\
  cout << setprecision(25) << fixed << p << endl; // 小数点以下を25桁で表示
#define all(obj) (obj).begin(), (obj).end()
#define pb push_back

// usingエイリアス（別名という意味，型定義のこと）
using ll = long long;
// template <class T> using Vec = std::vector<T>;//エイリアステンプレート

const ll MOD = (ll)1e9 + 7;
// const ll MOD = 998244353;
const ll INF = (ll)1e18 + 1;
const double EPS = 1e-9;
const long double pi = 3.1415926535897932384626433832795028841971L;

// マクロでintをlong longと定義したときはsinged
int main() {
  cin.tie(0);                  // cinとcoutの同期を切る（高速化)
  ios::sync_with_stdio(false); // iostreamとstdioの同期を切る（高速化)

  ll n, k, c;
  cin >> n >> k;
  vector<ll> a(n);
  vector<ll> tmp;
  vector<bool> flag(n, false); // 前に来たかどうかのflag
  for (ll i = 0; i < n; i++) {
    cin >> c;
    a[i] = c - 1; // 配列の番号と合わせるため
  }

  tmp.pb(0);
  flag[0] = true;

  for (ll i = 0; i < n; i++) {
    tmp.pb(a[tmp[i]]);
    if (flag[a[tmp[i]]] == true)
      break;
    flag[a[tmp[i]]] = true;
  }

  auto loop_start_place_iter = find(tmp.begin(), tmp.end(), *(tmp.end() - 1));
  ll loop_num = distance(loop_start_place_iter, tmp.end()) - 1;
  ll before_num = tmp.size() - loop_num - 1;

  debug(loop_num);
  debug(before_num);

  debug(before_num + (k - before_num) % loop_num);
  DEBUG_VEC(tmp);

  if (k > before_num) {
    cout << tmp[before_num + (k - before_num) % loop_num] + 1 << endl;
  } else {
    cout << tmp[k] + 1 << endl;
  }

  return 0;
}

Error: WA

Fixed submission:

#include <bits/stdc++.h> //g++-9で実行（gcc version 9.3.0），g++だとデフォルトのclang

using namespace std;

// #define int long long //intでオーバフローした時の切り替え用
#define debug(x)                                                               \\
  cerr << #x << ": " << x << endl // エラー出力として変数名と変数の中身表示
#define DEBUG_VEC(v)                                                           \\
  cerr << #v << ":";                                                           \\
  for (int i = 0; i < v.size(); i++)                                           \\
    cerr << " " << v[i];                                                       \\
  cerr << endl;
#define DEBUG_MAT(v)                                                           \\
  cerr << #v << endl;                                                          \\
  for (int i = 0; i < v.size(); i++) {                                         \\
    for (int j = 0; j < v[i].size(); j++) {                                    \\
      cerr << v[i][j] << " ";                                                  \\
    }                                                                          \\
    cerr << endl;                                                              \\
  }
#define Sp(p)                                                                  \\
  cout << setprecision(25) << fixed << p << endl; // 小数点以下を25桁で表示
#define all(obj) (obj).begin(), (obj).end()
#define pb push_back

// usingエイリアス（別名という意味，型定義のこと）
using ll = long long;
// template <class T> using Vec = std::vector<T>;//エイリアステンプレート

const ll MOD = (ll)1e9 + 7;
// const ll MOD = 998244353;
const ll INF = (ll)1e18 + 1;
const double EPS = 1e-9;
const long double pi = 3.1415926535897932384626433832795028841971L;

// マクロでintをlong longと定義したときはsinged
int main() {
  cin.tie(0);                  // cinとcoutの同期を切る（高速化)
  ios::sync_with_stdio(false); // iostreamとstdioの同期を切る（高速化)

  ll n, k;
  cin >> n >> k;
  vector<ll> a(n);
  vector<ll> flag(n);
  for (ll i = 0; i < n; i++) {
    cin >> a[i];
  }
  flag[0] = 1;
  int loop_num = 0;
  int loop_before = 0;
  for (ll i = 0; i < n; i++) {
    for (ll j = i; j >= i; j--) {
      if (a[flag[i] - 1] == flag[j]) {
        loop_num = i + 1 - j;
        loop_before = j;
        cout << flag[loop_before + (k - loop_before) % loop_num] << endl;
        return 0;
      }
    }
    flag[i + 1] = a[flag[i] - 1];
  }
  cout << flag[n - 1] << endl;
  // DEBUG_VEC(flag);
  // debug(loop_before);
  // debug(loop_num);

  return 0;
}