Problem p02678 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <array>
#include <cassert>    // assert
#include <cmath>      // abs など
#include <functional> // greater など
#include <iostream>
#include <numeric> // accumulate など
#include <queue>
#include <set>
#include <stdexcept>
#include <string>
#include <tuple>
#include <vector>
using namespace std;

#define REP(i, n) for (int i = 0; i < (int)(n); i++)
typedef long long ll;

// #define NDEBUG 1
// debug用出力 https://trap.jp/post/998/
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) {
  cerr << H << " ";
  debug_out(T...);
}
#ifdef NDEBUG
#define debug(...)
#else
#define debug(...) debug_out(__VA_ARGS__)
#endif

//////////////// //////////////// //////////////// ////////////////
///////////////////
//////////////// //////////////// //////////////// ////////////////
///////////////////

// constexpr inline ll MOD = 1'000'000'007;
constexpr int MAX_N = 20'000 + 9;
int n, m;
array<vector<int>, MAX_N> vs;
array<int, MAX_N> ans;
queue<int> mins;

int main() {
  // 入出力
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);

  cin >> n >> m;
  REP(i, m) {
    int a, b;
    cin >> a >> b;
    vs.at(a).push_back(b);
    vs.at(b).push_back(a);
  }

  // bfs
  ans.at(1) = 1;
  mins.push(1);
  while (!mins.empty()) {
    int v = mins.front();
    mins.pop();
    for (int u : vs.at(v)) {
      if (ans.at(u) != 0) {
        continue;
      }
      ans.at(u) = v;
      mins.push(u);
    }
  }

  cout << "Yes" << endl;
  REP(i, n - 1) { cout << ans.at(i + 2) << endl; }

  return 0;
}


Fixed submission:
#include <algorithm>
#include <array>
#include <cassert>    // assert
#include <cmath>      // abs など
#include <functional> // greater など
#include <iostream>
#include <numeric> // accumulate など
#include <queue>
#include <set>
#include <stdexcept>
#include <string>
#include <tuple>
#include <vector>
using namespace std;

#define REP(i, n) for (int i = 0; i < (int)(n); i++)
typedef long long ll;

// #define NDEBUG 1
// debug用出力 https://trap.jp/post/998/
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) {
  cerr << H << " ";
  debug_out(T...);
}
#ifdef NDEBUG
#define debug(...)
#else
#define debug(...) debug_out(__VA_ARGS__)
#endif

//////////////// //////////////// //////////////// ////////////////
///////////////////
//////////////// //////////////// //////////////// ////////////////
///////////////////

// constexpr inline ll MOD = 1'000'000'007;
constexpr int MAX_N = 200'000 + 9;
int n, m;
array<vector<int>, MAX_N> vs;
array<int, MAX_N> ans;
queue<int> mins;

int main() {
  // 入出力
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);

  cin >> n >> m;
  REP(i, m) {
    int a, b;
    cin >> a >> b;
    vs.at(a).push_back(b);
    vs.at(b).push_back(a);
  }

  // bfs
  ans.at(1) = 1;
  mins.push(1);
  while (!mins.empty()) {
    int v = mins.front();
    mins.pop();
    for (int u : vs.at(v)) {
      if (ans.at(u) != 0) {
        continue;
      }
      ans.at(u) = v;
      mins.push(u);
    }
  }

  cout << "Yes" << endl;
  REP(i, n - 1) { cout << ans.at(i + 2) << endl; }

  return 0;
}