Problem p03166 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
#define int long long int
#define S second
#define F first

using namespace std;

const int N = 120, M = 1e5 + 100;
int dp[N], n, m, cnt[N], k[N];
pair<int, int> p[N];
vector<int> v[N], ans;
queue<int> q;

int32_t main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int aa, bb;
    cin >> aa >> bb;
    v[aa - 1].push_back(bb - 1);
    cnt[bb - 1]++;
  }
  for (int i = 0; i < n; i++) {
    if (cnt[i] == 0) {
      q.push(i);
    }
  }
  while (q.size()) {
    int u = q.front();
    q.pop();
    ans.push_back(u);
    for (auto x : v[u]) {
      cnt[x]--;
      if (!cnt[x]) {
        q.push(x);
      }
    }
  }
  // sort(p , p + n) ;
  reverse(ans.begin(), ans.end());
  for (int i = 0; i < n; i++) {
    k[ans[i]] = i;
  }
  int mx = 0;
  for (int i = 0; i < n; i++) {
    // cout << ans[i] << " " ;
    for (auto j : v[ans[i]]) {
      dp[i] = max(dp[k[j]] + 1, dp[i]);
    }
    mx = max(mx, dp[i]);
  }
  cout << mx;
  return 0;
}
/*
#include <radman/roderc++.h>
                     ....._____
                 .~~~~~////////\\ ...
              .:::::////////////\\                                          ....::////////..
(/\\\\...
           .::::://////   \\\\///\\              .::::// ..:::::///////////////.
\\\\\$$$$$$
         \\\\\//////      \\\\///\\           //\\\//////
\\\\\////////////////////.                           ""\\$$$$$$$
         \\\\\////         \\\\////         |||||////////.            \\\\\/////
~~~~~//////          ...                  "\$$$$
         \\\\\//\         ////|||/          \\\\\/////////
\\\\\//\       ~~~~~//////        (/\\\\...                   .
         \\\\\//\        ////|||/          |||||////*\\///.
\\\\\//\       ~~~~~//////        \\\\\$$$$$$                 .@@@@@.
         \\\\\//\       ////|||/           \\\\\///|\\\////
\\\\\//\       ~~~~~//////         ""\\$$$$$$$               @@@@////\
         \\\\\//\ ____---/|||/            |||||///|\\\\\///.
\\\\\//\       ~~~~~//////             "\$$$$                @@@@\///\
         \\\\\//\--|||||||_-'             \\\\\///|\\\\\////
\\\\\//\       ~~~~~//////                                  ,@@@@|///|
         \\\\\//\|||||_"-\\\\\           |||||///|  ~~~~~///.
\\\\\//\      ~~~~~//////     .@@@@.                    /@@@@@|/////
         \\\\\//\///"""\\\\\\\\          \\\\\///|~~~~[[[////.
\\\\\//\     ~~~~~//////      @@@@@@@@                ..@@@@@.//////
         \\\\\//\    \"""\\\\\\\        |||||///|~~[[[[["\////.
\\\\\//\    ~~~~~//////      '@@@@/////\       .:;@@@@@@@..///////"
         \\\\\//\      \"""\\\\\\       \\\\\///|[[[[*\\\\\////.
\\\\\//\   ~~~~~//////        *@@@\//////\@@@@@@@@..//////////"
         \\\\\//\       \:::\\\\/      |||||///|[[[*   \\\\\\///
\\\\\//\~~~~~///////'            *@@\/////////////////////"
         \\\\\//\        \___\\/       \\\\\///|*       \\\\\/"
\\\\\//\~~////////'                 **"///////////"""
         \\\\\//\                     |||||///| \\\\\//\///////"
         \\\\\//\                     \\\\\///| \\\\\//\////"
         \\\\\///                    |||||////|                       \\\\\////"
         \\\\\/"                     \\\\\///*                        \\\\\/"
                                     """""*
*/


Fixed submission:
#include <bits/stdc++.h>
#define int long long int
#define S second
#define F first

using namespace std;

const int N = 2e6 + 100, M = 1e5 + 100;
int dp[N], n, m, cnt[N], k[N];
pair<int, int> p[N];
vector<int> v[N], ans;
queue<int> q;

int32_t main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int aa, bb;
    cin >> aa >> bb;
    v[aa - 1].push_back(bb - 1);
    cnt[bb - 1]++;
  }
  for (int i = 0; i < n; i++) {
    if (cnt[i] == 0) {
      q.push(i);
    }
  }
  while (q.size()) {
    int u = q.front();
    q.pop();
    ans.push_back(u);
    for (auto x : v[u]) {
      cnt[x]--;
      if (!cnt[x]) {
        q.push(x);
      }
    }
  }
  // sort(p , p + n) ;
  reverse(ans.begin(), ans.end());
  for (int i = 0; i < n; i++) {
    k[ans[i]] = i;
  }
  int mx = 0;
  for (int i = 0; i < n; i++) {
    // cout << ans[i] << " " ;
    for (auto j : v[ans[i]]) {
      dp[i] = max(dp[k[j]] + 1, dp[i]);
    }
    mx = max(mx, dp[i]);
  }
  cout << mx;
  return 0;
}
/*
#include <radman/roderc++.h>
                     ....._____
                 .~~~~~////////\\ ...
              .:::::////////////\\                                          ....::////////..
(/\\\\...
           .::::://////   \\\\///\\              .::::// ..:::::///////////////.
\\\\\$$$$$$
         \\\\\//////      \\\\///\\           //\\\//////
\\\\\////////////////////.                           ""\\$$$$$$$
         \\\\\////         \\\\////         |||||////////.            \\\\\/////
~~~~~//////          ...                  "\$$$$
         \\\\\//\         ////|||/          \\\\\/////////
\\\\\//\       ~~~~~//////        (/\\\\...                   .
         \\\\\//\        ////|||/          |||||////*\\///.
\\\\\//\       ~~~~~//////        \\\\\$$$$$$                 .@@@@@.
         \\\\\//\       ////|||/           \\\\\///|\\\////
\\\\\//\       ~~~~~//////         ""\\$$$$$$$               @@@@////\
         \\\\\//\ ____---/|||/            |||||///|\\\\\///.
\\\\\//\       ~~~~~//////             "\$$$$                @@@@\///\
         \\\\\//\--|||||||_-'             \\\\\///|\\\\\////
\\\\\//\       ~~~~~//////                                  ,@@@@|///|
         \\\\\//\|||||_"-\\\\\           |||||///|  ~~~~~///.
\\\\\//\      ~~~~~//////     .@@@@.                    /@@@@@|/////
         \\\\\//\///"""\\\\\\\\          \\\\\///|~~~~[[[////.
\\\\\//\     ~~~~~//////      @@@@@@@@                ..@@@@@.//////
         \\\\\//\    \"""\\\\\\\        |||||///|~~[[[[["\////.
\\\\\//\    ~~~~~//////      '@@@@/////\       .:;@@@@@@@..///////"
         \\\\\//\      \"""\\\\\\       \\\\\///|[[[[*\\\\\////.
\\\\\//\   ~~~~~//////        *@@@\//////\@@@@@@@@..//////////"
         \\\\\//\       \:::\\\\/      |||||///|[[[*   \\\\\\///
\\\\\//\~~~~~///////'            *@@\/////////////////////"
         \\\\\//\        \___\\/       \\\\\///|*       \\\\\/"
\\\\\//\~~////////'                 **"///////////"""
         \\\\\//\                     |||||///| \\\\\//\///////"
         \\\\\//\                     \\\\\///| \\\\\//\////"
         \\\\\///                    |||||////|                       \\\\\////"
         \\\\\/"                     \\\\\///*                        \\\\\/"
                                     """""*
*/