Problem p02678 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<ll, ll>
#define FOR(I, A, B) for (ll I = ll(A); I < ll(B); ++I)
#define FORR(I, A, B) for (ll I = ll((B)-1); I >= ll(A); --I)
#define TO(x, t, f) ((x) ? (t) : (f))
#define SORT(x) (sort(x.begin(), x.end())) // 0 2 2 3 4 5 8 9
#define POSL(x, v)                                                             \
  (lower_bound(x.begin(), x.end(), v) - x.begin()) // xi>=v  x is sorted
#define POSU(x, v)                                                             \
  (upper_bound(x.begin(), x.end(), v) - x.begin()) // xi>v  x is sorted
#define NUM(x, v) (POSU(x, v) - POSL(x, v))        // x is sorted
#define REV(x) (reverse(x.begin(), x.end()))       // reverse
ll gcd_(ll a, ll b) {
  if (a % b == 0)
    return b;
  return gcd_(b, a % b);
}
ll lcm_(ll a, ll b) {
  ll c = gcd_(a, b);
  return ((a / c) * (b / c) * c);
}
#define NEXTP(x) next_permutation(x.begin(), x.end())
const ll INF = ll(1e16) + ll(7);
const ll MOD = 1000000007LL;
#define out(a) cout << fixed << setprecision((a))
// tie(a,b,c) = make_tuple(10,9,87);
#define pop_(a) __builtin_popcount((a))
ll keta(ll a) {
  ll r = 0;
  while (a) {
    a /= 10;
    r++;
  }
  return r;
}

vector<int> dis_(int n, vector<int> &a, vector<int> &b, int start) {
  vector<int> G[n];
  FOR(i, 0, a.size()) {
    G[a[i]].push_back(b[i]);
    G[b[i]].push_back(a[i]);
  }
  vector<int> res(n, -1);
  queue<int> nex;
  nex.push(start);
  res[start] = 0;
  while (nex.size()) {
    int from = nex.front();
    nex.pop();
    for (auto to : G[from]) {
      if (res[to] >= 0)
        continue;
      res[to] = res[from] + 1;
      nex.push(to);
    }
  }
  return res;
}

int main() {

  int n, m;
  cin >> n >> m;
  vector<int> a(n), b(n), ans(n), min_d(n, MOD);

  FOR(i, 0, m) cin >> a[i] >> b[i];
  FOR(i, 0, m) a[i]--, b[i]--;

  auto dis = dis_(n, a, b, 0);
  if (count(dis.begin(), dis.end(), -1)) {
    cout << "No" << endl;
    return 0;
  }
  cout << "Yes" << endl;
  FOR(i, 0, m) {
    if (min_d[a[i]] > dis[b[i]]) {
      min_d[a[i]] = dis[b[i]];
      ans[a[i]] = b[i];
    }
    if (min_d[b[i]] > dis[a[i]]) {
      min_d[b[i]] = dis[a[i]];
      ans[b[i]] = a[i];
    }
  }
  FOR(i, 1, n) { cout << ans[i] + 1 << endl; }
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<ll, ll>
#define FOR(I, A, B) for (ll I = ll(A); I < ll(B); ++I)
#define FORR(I, A, B) for (ll I = ll((B)-1); I >= ll(A); --I)
#define TO(x, t, f) ((x) ? (t) : (f))
#define SORT(x) (sort(x.begin(), x.end())) // 0 2 2 3 4 5 8 9
#define POSL(x, v)                                                             \
  (lower_bound(x.begin(), x.end(), v) - x.begin()) // xi>=v  x is sorted
#define POSU(x, v)                                                             \
  (upper_bound(x.begin(), x.end(), v) - x.begin()) // xi>v  x is sorted
#define NUM(x, v) (POSU(x, v) - POSL(x, v))        // x is sorted
#define REV(x) (reverse(x.begin(), x.end()))       // reverse
ll gcd_(ll a, ll b) {
  if (a % b == 0)
    return b;
  return gcd_(b, a % b);
}
ll lcm_(ll a, ll b) {
  ll c = gcd_(a, b);
  return ((a / c) * (b / c) * c);
}
#define NEXTP(x) next_permutation(x.begin(), x.end())
const ll INF = ll(1e16) + ll(7);
const ll MOD = 1000000007LL;
#define out(a) cout << fixed << setprecision((a))
// tie(a,b,c) = make_tuple(10,9,87);
#define pop_(a) __builtin_popcount((a))
ll keta(ll a) {
  ll r = 0;
  while (a) {
    a /= 10;
    r++;
  }
  return r;
}

vector<int> dis_(int n, vector<int> &a, vector<int> &b, int start) {
  vector<int> G[n];
  FOR(i, 0, a.size()) {
    G[a[i]].push_back(b[i]);
    G[b[i]].push_back(a[i]);
  }
  vector<int> res(n, -1);
  queue<int> nex;
  nex.push(start);
  res[start] = 0;
  while (nex.size()) {
    int from = nex.front();
    nex.pop();
    for (auto to : G[from]) {
      if (res[to] >= 0)
        continue;
      res[to] = res[from] + 1;
      nex.push(to);
    }
  }
  return res;
}

int main() {

  int n, m;
  cin >> n >> m;
  vector<int> a(m), b(m), ans(n), min_d(n, MOD);

  FOR(i, 0, m) cin >> a[i] >> b[i];
  FOR(i, 0, m) a[i]--, b[i]--;

  auto dis = dis_(n, a, b, 0);
  if (count(dis.begin(), dis.end(), -1)) {
    cout << "No" << endl;
    return 0;
  }
  cout << "Yes" << endl;
  FOR(i, 0, m) {
    if (min_d[a[i]] > dis[b[i]]) {
      min_d[a[i]] = dis[b[i]];
      ans[a[i]] = b[i];
    }
    if (min_d[b[i]] > dis[a[i]]) {
      min_d[b[i]] = dis[a[i]];
      ans[b[i]] = a[i];
    }
  }
  FOR(i, 1, n) { cout << ans[i] + 1 << endl; }
}