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

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;

#define rep(i, n, m) for (int i = (n); i < (m); i++)
typedef struct {
  vector<int> to;
  bool visited;
} node;

int main(void) {
  // initialize();
  int N, M;
  cin >> N >> M;
  vector<vector<int>> G(N);
  vector<int> dir(N, -1);
  rep(i, 0, M) { // グラフ定義, 0オリジン
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    G[a].push_back(b);
    G[b].push_back(a);
  }

  queue<int> que;
  que.push(0);
  dir[0] = 0;
  while (!que.empty()) { // BFS
    int q = que.front();
    que.pop();
    for (auto to : G[q]) { // つながってる部屋毎に
      if (dir[to] != -1)
        continue;
      dir[to] = q + 1;
      que.push(to);
    }
  }
  bool can = true;
  for (auto d : dir) { // 到達してない部屋確認
    if (d == -1) {
      can = false;
      break;
    }
  }
  if (!can)
    cout << "No\\n";
  else {
    cout << "Yes\\n";
    rep(i, 1, N) cout << dir[i] << endl;
  }
}


Error: -6
double free or corruption (out)


Fixed submission:

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;

#define rep(i, n, m) for (int i = (n); i < (m); i++)
#define rep_d(i, n, m) for (int i = (n)-1; i >= (m); i--)
#define sort_asc(X) sort((X).begin(), (X).end())
#define sort_desc(X) sort((X).begin(), (X).end(), greater<>())
#define endl "\\n"

template <class T> bool chmax(T &a, T b);
template <class T> bool chmin(T &a, T b);
int *eratosthenes(int N);
bool bit_search(int pattern, int N);
void initialize(void);

const ll INF = 1LL << 60;
const int k_mod = 1e9 + 7;
template <typename T, typename K> struct P {
  T a;
  K b;
};
typedef struct {
  vector<int> to;
  int cost;
  bool visited;
} node;

int main(void) {
  // initialize();
  int N, M;
  cin >> N >> M;
  vector<node> G(N);
  vector<int> dir(N - 1);
  rep(i, 0, N) { G[i].visited = false; }
  rep(i, 0, M) {
    int a, b;
    cin >> a >> b;
    a--;
    b--;
    G[a].to.push_back(b);
    G[b].to.push_back(a);
  }
  queue<int> que;
  que.push(0);
  while (!que.empty()) {
    int q = que.front();
    que.pop();
    for (auto to : G[q].to) {
      if (G[to].visited)
        continue;
      G[to].visited = true;
      dir[to - 1] = q + 1;
      que.push(to);
    }
  }
  bool can = true;
  for (auto g : G) {
    if (!g.visited) {
      can = false;
      break;
    }
  }
  if (!can)
    cout << "No\\n";
  else {
    cout << "Yes\\n";
    for (auto d : dir)
      cout << d << endl;
  }
}

template <class T> bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
int *eratosthenes(int N) {
  int *prime_array = new int[N + 1];
  int lim = N;
  prime_array[0] = 0;
  prime_array[1] = 0;
  rep(i, 2, N + 1) { prime_array[i] = 1; }
  rep(i, 2, lim) {
    if (prime_array[i] == 0)
      continue;
    lim = N / i;
    for (int j = i * 2; j < N + 1; j += i) {
      prime_array[j] = 0;
    }
  }
  return prime_array;
}
bool bit_search(int pattern, int N) {
  int cnt = 0;
  rep(bit, 0, N) {
    if (pattern & (1 << bit)) {
      cnt++;
    }
  }
  return true;
}
void initialize(void) { cout << fixed << setprecision(10); }