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

#include <algorithm> // count_ifに必要
#include <array>     // sizeはコンパイル時定数で固定
#include <iomanip> // cout << setprecision(15) << x で小数の出力精度を指定
#include <iostream>
#include <map>
#include <numeric> // accumulate, gcd
#include <queue>   // priority_queue も入ってる
#include <set>     // 要素数は size() で取得 multisetもある
#include <stack>
#include <string>
#include <tuple>
#include <utility> //pair
#include <vector>

using namespace std;
// 問題が起こるまでintは使用禁止2020-04-13
using ll = long long;

#define rep(i, n) for (int i = 0; i < (n); ++i)

template <class InputIterator, class T>
bool contains_itr(InputIterator iterator, const T &value) {
  if (find(iterator.begin(), iterator.end(), value) == iterator.end())
    return false;
  else
    return true;
}

template <class T> bool contains_set(set<T> st, const T &value) {
  if (st.find(value) == st.end()) {
    return false;
  } else {
    return true;
  }
}

template <class InputIterator> auto sum(InputIterator iterator) {
  return accumulate(iterator.begin(), iterator.end(), 0);
}

// endは排他的(exclusive)なので注意
vector<ll> range(ll begin, ll end) {
  vector<ll> result;
  for (ll i = begin; i < end; ++i) {
    result.push_back(i);
  }
  return result;
}

// =========ここまでテンプレ============

int main() {
  ll n, m;
  cin >> n >> m;
  vector<set<ll>> dests(n, set<ll>{});
  rep(i, m) {
    ll a, b;
    cin >> a >> b;
    --a;
    --b;
    dests[a].insert(b);
    dests[b].insert(a);
  }

  // vector<ll> shortests(n, LLONG_MAX);
  // shortests[0] = 0;
  vector<ll> befores(n, -1);

  queue<ll> que;
  que.push(0);
  while (!que.empty()) {
    ll now = que.front();
    que.pop();
    for (auto itr = dests[now].begin(); itr != dests[now].end(); ++itr) {
      ll next = (*itr);
      if (befores[next] == -1) {
        befores[next] = now;
        que.push(next);
      }
    }
  }
  cout << "Yes" << endl;
  rep(i, befores.size() - 1) cout << befores[i + 1] + 1 << endl;
}


Error: -11

Fixed submission:

#include <algorithm> // count_ifに必要
#include <array>     // sizeはコンパイル時定数で固定
#include <iomanip> // cout << setprecision(15) << x で小数の出力精度を指定
#include <iostream>
#include <map>
#include <numeric> // accumulate, gcd
#include <queue>   // priority_queue も入ってる
#include <set>     // 要素数は size() で取得 multisetもある
#include <stack>
#include <string>
#include <tuple>
#include <utility> //pair
#include <vector>

using namespace std;
// 問題が起こるまでintは使用禁止2020-04-13
using ll = long long;

#define rep(i, n) for (int i = 0; i < (n); ++i)

template <class InputIterator, class T>
bool contains_itr(InputIterator iterator, const T &value) {
  if (find(iterator.begin(), iterator.end(), value) == iterator.end())
    return false;
  else
    return true;
}

template <class T> bool contains_set(set<T> st, const T &value) {
  if (st.find(value) == st.end()) {
    return false;
  } else {
    return true;
  }
}

template <class InputIterator> auto sum(InputIterator iterator) {
  return accumulate(iterator.begin(), iterator.end(), 0);
}

// endは排他的(exclusive)なので注意
vector<ll> range(ll begin, ll end) {
  vector<ll> result;
  for (ll i = begin; i < end; ++i) {
    result.push_back(i);
  }
  return result;
}

// =========ここまでテンプレ============

int main() {
  ll n, m;
  vector<set<ll>> dests = vector<set<ll>>(n, set<ll>{});
  rep(i, m) {
    ll a, b;
    cin >> a >> b;
    --a;
    --b;
    dests[a].insert(b);
    dests[b].insert(a);
  }

  // vector<ll> shortests(n, LLONG_MAX);
  // shortests[0] = 0;
  vector<ll> befores(n, -1);

  queue<ll> que;
  que.push(0);
  while (!que.empty()) {
    ll now = que.front();
    que.pop();
    for (auto itr = dests[now].begin(); itr != dests[now].end(); ++itr) {
      ll next = (*itr);
      if (befores[next] == -1) {
        befores[next] = now;
        que.push(next);
      }
    }
  }
  cout << "Yes" << endl;
  rep(i, befores.size() - 1) cout << befores[i + 1] + 1;
}