Problem p00550 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define mygc(c) (c) = getchar_unlocked()
#define mypc(c) putchar_unlocked(c)
inline void reader(int &x) {
  int k, m = 0;
  x = 0;
  for (;;) {
    mygc(k);
    if (k == '-') {
      m = 1;
      break;
    }
    if ('0' <= k && k <= '9') {
      x = k - '0';
      break;
    }
  }
  for (;;) {
    mygc(k);
    if (k < '0' || k > '9')
      break;
    x = x * 10 + k - '0';
  }
  if (m)
    x = -x;
}
inline void writer(int x, char c) {
  int s = 0, m = 0;
  char f[10];
  if (x < 0)
    m = 1, x = -x;
  while (x)
    f[s++] = x % 10, x /= 10;
  if (!s)
    f[s++] = 0;
  if (m)
    mypc('-');
  while (s--)
    mypc(f[s] + '0');
  mypc(c);
}
using namespace std;

vector<int> E[100000], G[100000];
int l[100000], d[100000], b[100000], cnt[200001], u[200000], v[200000],
    r[200000], que[100000];
int main() {
  int n, m, q;
  reader(n);
  reader(m);
  reader(q);
  rep(i, m) {
    reader(u[i]);
    reader(v[i]);
    u[i]--;
    v[i]--;
    r[i] = q;
    l[u[i]]++;
    l[v[i]]++;
  }
  rep(i, n) E[i].reserve(l[i]), G[i].reserve(l[i]), l[i] = 0;
  rep(i, q) {
    int a;
    reader(a);
    r[a - 1] = i;
  }
  rep(i, m) {
    E[u[i]][l[u[i]]] = v[i];
    G[u[i]][l[u[i]]++] = r[i];
    E[v[i]][l[v[i]]] = u[i];
    G[v[i]][l[u[i]]++] = r[i];
  }
  d[0] = 1;
  b[0] = q;
  int s = 0, g = 1;
  while (s != g) {
    int p = que[s++];
    rep(i, l[p]) {
      int a = E[p][i];
      if (d[a] == 0) {
        d[a] = d[p] + 1;
        que[g++] = a;
      }
      if (d[a] == d[p] + 1)
        b[a] = max(b[a], min(b[p], G[p][i]));
    }
  }
  rep(i, n) cnt[b[i]]++;
  int ans = 0;
  rep(i, q) {
    ans += cnt[i];
    writer(ans, '\n');
  }
}

Fixed submission:
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define mygc(c) (c) = getchar_unlocked()
#define mypc(c) putchar_unlocked(c)
inline void reader(int &x) {
  int k, m = 0;
  x = 0;
  for (;;) {
    mygc(k);
    if (k == '-') {
      m = 1;
      break;
    }
    if ('0' <= k && k <= '9') {
      x = k - '0';
      break;
    }
  }
  for (;;) {
    mygc(k);
    if (k < '0' || k > '9')
      break;
    x = x * 10 + k - '0';
  }
  if (m)
    x = -x;
}
inline void writer(int x, char c) {
  int s = 0, m = 0;
  char f[10];
  if (x < 0)
    m = 1, x = -x;
  while (x)
    f[s++] = x % 10, x /= 10;
  if (!s)
    f[s++] = 0;
  if (m)
    mypc('-');
  while (s--)
    mypc(f[s] + '0');
  mypc(c);
}
using namespace std;

vector<int> E[100000], G[100000];
int l[100000], d[100000], b[100000], cnt[200001], u[200000], v[200000],
    r[200000], que[100000];
int main() {
  int n, m, q;
  reader(n);
  reader(m);
  reader(q);
  rep(i, m) {
    reader(u[i]);
    reader(v[i]);
    u[i]--;
    v[i]--;
    r[i] = q;
    l[u[i]]++;
    l[v[i]]++;
  }
  rep(i, n) E[i].reserve(l[i]), G[i].reserve(l[i]), l[i] = 0;
  rep(i, q) {
    int a;
    reader(a);
    r[a - 1] = i;
  }
  rep(i, m) {
    E[u[i]][l[u[i]]] = v[i];
    G[u[i]][l[u[i]]++] = r[i];
    E[v[i]][l[v[i]]] = u[i];
    G[v[i]][l[v[i]]++] = r[i];
  }
  d[0] = 1;
  b[0] = q;
  int s = 0, g = 1;
  while (s != g) {
    int p = que[s++];
    rep(i, l[p]) {
      int a = E[p][i];
      if (d[a] == 0) {
        d[a] = d[p] + 1;
        que[g++] = a;
      }
      if (d[a] == d[p] + 1)
        b[a] = max(b[a], min(b[p], G[p][i]));
    }
  }
  rep(i, n) cnt[b[i]]++;
  int ans = 0;
  rep(i, q) {
    ans += cnt[i];
    writer(ans, '\n');
  }
}