Problem p01294 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;

#define dump(a) (cerr << (#a) << " = " << (a) << endl)

template <class T> inline void chmax(T &a, const T &b) {
  if (b > a)
    a = b;
}
template <class T> inline void chmin(T &a, const T &b) {
  if (b < a)
    a = b;
}

template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p) {
  os << '(' << p.first << ", " << p.second << ')';
  return os;
}

template <class Tuple, unsigned Index>
void print_tuple(ostream &os, const Tuple &t) {}

template <class Tuple, unsigned Index, class Type, class... Types>
void print_tuple(ostream &os, const Tuple &t) {
  if (Index > 0)
    os << ", ";
  os << get<Index>(t);
  print_tuple<Tuple, Index + 1, Types...>(os, t);
}

template <class... Types>
ostream &operator<<(ostream &os, const tuple<Types...> &t) {
  os << '(';
  print_tuple<tuple<Types...>, 0, Types...>(os, t);
  return os << ')';
}

template <class Iterator>
ostream &dump_range(ostream &, Iterator, const Iterator &);

template <typename T> ostream &operator<<(ostream &os, vector<T> c) {
  return dump_range(os, c.cbegin(), c.cend());
}

template <class Iterator>
ostream &dump_range(ostream &os, Iterator first, const Iterator &last) {
  os << '[';
  for (int i = 0; first != last; ++i, ++first) {
    if (i)
      os << ", ";
    os << *first;
  }
  return os << ']';
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  for (int n, d; cin >> n >> d && n;) {
    int rest = 0;
    vector<int> power(n, 0);
    vector<vector<int>> missiles(n);
    for (int i = 0; i < n; ++i) {
      int m;
      cin >> m;
      rest += m;
      missiles[i].resize(m);
      for (int j = 0; j < m; ++j) {
        cin >> missiles[i][j];
        power[i] += missiles[i][j];
      }
    }

    while (rest) {
      bool update = false;
      for (int i = 0; i < n;) {
        if (missiles.size() == 0) {
          power.erase(power.begin() + i);
          missiles.erase(missiles.begin() + i);
          --n;
          continue;
        }

        const int next = power[i] - missiles[i].back();
        for (int j = 0; j < n; ++j) {
          if (i == j)
            continue;
          if (next + d < power[j])
            goto ng;
        }

        --rest;
        missiles[i].pop_back();
        power[i] = next;
        update = true;

      ng:;
        ++i;
      }

      if (!update)
        break;
    }

    cout << (rest ? "No" : "Yes") << endl;
  }

  return EXIT_SUCCESS;
}

Fixed submission:
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;

#define dump(a) (cerr << (#a) << " = " << (a) << endl)

template <class T> inline void chmax(T &a, const T &b) {
  if (b > a)
    a = b;
}
template <class T> inline void chmin(T &a, const T &b) {
  if (b < a)
    a = b;
}

template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p) {
  os << '(' << p.first << ", " << p.second << ')';
  return os;
}

template <class Tuple, unsigned Index>
void print_tuple(ostream &os, const Tuple &t) {}

template <class Tuple, unsigned Index, class Type, class... Types>
void print_tuple(ostream &os, const Tuple &t) {
  if (Index > 0)
    os << ", ";
  os << get<Index>(t);
  print_tuple<Tuple, Index + 1, Types...>(os, t);
}

template <class... Types>
ostream &operator<<(ostream &os, const tuple<Types...> &t) {
  os << '(';
  print_tuple<tuple<Types...>, 0, Types...>(os, t);
  return os << ')';
}

template <class Iterator>
ostream &dump_range(ostream &, Iterator, const Iterator &);

template <typename T> ostream &operator<<(ostream &os, vector<T> c) {
  return dump_range(os, c.cbegin(), c.cend());
}

template <class Iterator>
ostream &dump_range(ostream &os, Iterator first, const Iterator &last) {
  os << '[';
  for (int i = 0; first != last; ++i, ++first) {
    if (i)
      os << ", ";
    os << *first;
  }
  return os << ']';
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  for (int n, d; cin >> n >> d && n;) {
    int rest = 0;
    vector<int> power(n, 0);
    vector<vector<int>> missiles(n);
    for (int i = 0; i < n; ++i) {
      int m;
      cin >> m;
      rest += m;
      missiles[i].resize(m);
      for (int j = 0; j < m; ++j) {
        cin >> missiles[i][j];
        power[i] += missiles[i][j];
      }
    }

    while (rest) {
      bool update = false;
      for (int i = 0; i < n;) {
        if (missiles[i].size() == 0) {
          power.erase(power.begin() + i);
          missiles.erase(missiles.begin() + i);
          --n;
          continue;
        }

        const int next = power[i] - missiles[i].back();
        for (int j = 0; j < n; ++j) {
          if (i == j)
            continue;
          if (next + d < power[j])
            goto ng;
        }

        --rest;
        missiles[i].pop_back();
        power[i] = next;
        update = true;

      ng:;
        ++i;
      }

      if (!update)
        break;
    }

    cout << (rest ? "No" : "Yes") << endl;
  }

  return EXIT_SUCCESS;
}