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

#include <algorithm>
#include <cmath>
#include <iostream>
#include <queue>
#include <string>
#include <vector>

using namespace std;

using ipair = pair<int, int>;
// bool operator>(const ipair a, const ipair b) { return a.first > b.first; };

int main() {
  int n, m;
  cin >> n >> m;
  // int a[m], c[m];
  ipair vs[2 * m];
  int tempa, tempb;
  long long int s[n], q[n];
  int nodesnum[n], nodelabel[n];
  for (int i = 0; i < n; i++) {
    nodesnum[i] = 0;
    nodelabel[i] = 0;
  }
  for (int i = 0; i < m; i++) {
    cin >> tempa >> tempb;
    vs[i].first = tempa - 1;
    vs[i].second = tempb - 1;
    vs[m + i].first = tempb - 1;
    vs[m + i].second = tempa - 1;
    nodesnum[tempa - 1]++;
    nodesnum[tempb - 1]++;
  }
  tempa = 0;
  for (int i = 0; i < n; i++) {
    nodelabel[i] = tempa;
    tempa += nodesnum[i];
  }
  const int Inf = n + 1;
  sort(vs, vs + 2 * m);
  int d[n], up, vp;
  int numq = n - 1, u, v;
  for (int i = 1; i < n; i++) {
    d[i] = -1;
  }
  queue<int> que;
  que.push(0);
  d[0] = 0;

  while (numq > 0) {
    u = que.front();
    que.pop();
    up = d[u];

    for (int i = 0; i < nodesnum[u]; i++) {
      v = vs[nodelabel[u] + i].second;
      // cout << v << endl;
      if (d[v] == -1) {
        d[v] = up + 1;
        que.push(v);
        s[v] = u;
        numq--;
      }
    }
  }
  // for (int)
  // for (int i = 0; i < m; i++)
  // {
  //     cin >> tempa >> tempb;
  //     a[tempa - 1][c[tempa - 1]] = tempb - 1;
  //     a[tempb - 1][c[tempb - 1]] = tempa - 1;
  //     c[tempa - 1]++;
  //     c[tempb - 1]++;
  // }
  // const int Inf = n + 1;
  //
  // ipair d[n], up, vp;
  // int numq = n - 1, u, v;
  // for (int i = 1; i < n; i++)
  // {
  //     d[i].first = Inf;
  //     d[i].second = i;
  //     q[i] = i;
  // }
  // d[0].first = 0;
  // d[0].second = 0;
  // priority_queue<ipair, vector<ipair>, greater<ipair>

  //                >
  //     P;
  // P.push(d[0]);
  // while (numq != 0)
  // {
  //     up = P.top();
  //     P.pop();
  //     numq--;
  //     u = up.second;
  //     for (int i = 0; i < m; i++)
  //     {
  //         if (vs[i].first == u)
  //             v = vs[i].second;
  //         if (vs[i].second == u)
  //             v = vs[i].first;
  //         if (d[v].first > d[u].first + 1)
  //         {
  //             s[v] = u;
  //             d[v].first = d[u].first + 1;
  //             P.push(d[v]);
  //         }
  //     }
  // }

  // for (int i = 0; i < n; i++)
  // {
  //     for (int j = 0; j < m; j++)
  //     {
  //         u = a[j] - 1;
  //         v = b[j] - 1;
  //         // cout << j << u << v << endl;
  //         if (d[v] > d[u] + 1)
  //         {
  //             s[v] = u;
  //             d[v] = d[u] + 1;
  //         }
  //         if (d[u] > d[v] + 1)
  //         {
  //             s[u] = v;
  //             d[u] = d[v] + 1;
  //         }
  //     }
  // }

  cout << "Yes" << endl;
  for (int i = 1; i < n; i++) {
    cout << s[i] + 1 << endl;
  }
  return 0;
}


Error: 0

Fixed submission:

#include <algorithm>
#include <cmath>
#include <iostream>
#include <queue>
#include <string>
#include <vector>

using namespace std;

using ipair = pair<int, int>;
bool operator>(const ipair a, const ipair b) { return a.first > b.first; };

int main() {
  int n, m;
  cin >> n >> m;
  int a[m][m], c[m];
  ipair vs[m];
  int tempa, tempb;
  for (int i = 0; i < m; i++) {
    cin >> tempa >> tempb;
    vs[i] = make_pair(tempa - 1, tempb - 1);
  }
  // for (int i = 0; i < m; i++)
  // {
  //     cin >> tempa >> tempb;
  //     a[tempa - 1][c[tempa - 1]] = tempb - 1;
  //     a[tempb - 1][c[tempb - 1]] = tempa - 1;
  //     c[tempa - 1]++;
  //     c[tempb - 1]++;
  // }
  const int Inf = n + 1;
  long long int s[n], q[n];
  ipair d[n], up, vp;
  int numq = n - 1, u, v;
  for (int i = 1; i < n; i++) {
    d[i].first = Inf;
    d[i].second = i;
    q[i] = i;
  }
  d[0].first = 0;
  d[0].second = 0;
  priority_queue<ipair, vector<ipair>, greater<ipair>

                 >
      P;
  P.push(d[0]);
  while (numq != 0) {
    up = P.top();
    P.pop();
    numq--;
    u = up.second;
    for (int i = 0; i < m; i++) {
      if (vs[i].first == u)
        v = vs[i].second;
      if (vs[i].second == u)
        v = vs[i].first;
      if (d[v].first > d[u].first + 1) {
        s[v] = u;
        d[v].first = d[u].first + 1;
        P.push(d[v]);
      }
    }
  }

  // for (int i = 0; i < n; i++)
  // {
  //     for (int j = 0; j < m; j++)
  //     {
  //         u = a[j] - 1;
  //         v = b[j] - 1;
  //         // cout << j << u << v << endl;
  //         if (d[v] > d[u] + 1)
  //         {
  //             s[v] = u;
  //             d[v] = d[u] + 1;
  //         }
  //         if (d[u] > d[v] + 1)
  //         {
  //             s[u] = v;
  //             d[u] = d[v] + 1;
  //         }
  //     }
  // }
  cout << "Yes" << endl;
  for (int i = 1; i < n; i++) {
    cout << s[i] + 1 << endl;
  }
  return 0;
}