Problem p02901 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// #include <boost/multiprecision/cpp_int.hpp>
// typedef boost::multiprecision::cpp_int ll;
typedef long double dd;
#define i_7 (ll)(1E9 + 7)
// #define i_7 998244353
#define i_5 i_7 - 2
ll mod(ll a) {
  ll c = a % i_7;
  if (c >= 0)
    return c;
  return c + i_7;
}
typedef pair<ll, ll> l_l;
ll inf = (ll)1E16;
#define rep(i, l, r) for (ll i = l; i <= r; i++)
#define pb push_back
ll max(ll a, ll b) {
  if (a < b)
    return b;
  else
    return a;
}
ll min(ll a, ll b) {
  if (a > b)
    return b;
  else
    return a;
}
void Max(ll &pos, ll val) { pos = max(pos, val); } // Max(dp[n],dp[n-1]);
void Min(ll &pos, ll val) { pos = min(pos, val); }
void Add(ll &pos, ll val) { pos = mod(pos + val); }
dd EPS = 1E-9;
#define fastio                                                                 \
  ios::sync_with_stdio(false);                                                 \
  cin.tie(0);                                                                  \
  cout.tie(0);
////////////////////////////

int main() {
  fastio

      ll n,
      m;
  cin >> n >> m;

  ll dp[1 << n][m + 1]; // jまで見てiを開けるための最小cost
  rep(i, 0, (1 << n) - 1) rep(j, 0, m) dp[i][j] = inf;
  dp[0][0] = 0;
  rep(i, 1, m) {
    ll a, b;
    ll c = 0;
    cin >> a >> b;
    rep(x, 1, b) {
      ll p;
      cin >> p;
      p--;
      c += (1ll << p);
    }
    rep(j, 0, (1 << n) - 1) {
      Min(dp[j][i], dp[j][i - 1]);
      Min(dp[j | c][i], dp[j][i - 1] + a);
    }
    for (ll j = (1 << n) - 1; j >= 0; j--) {
      rep(k, 0, n - 1) {
        ll p = 1 << k;
        if (j & p) {
          ll next = j - p;
          Min(dp[i][next], dp[i][j]);
        }
      }
    }
  }
  /*
  rep(i,0,(1<<n)-1){
      rep(j,0,m){
          cout<<dp[i][j]<<" ";
      }cout<<endl;
  }
   */
  if (dp[(1 << n) - 1][m] == inf)
    cout << -1;
  else
    cout << dp[(1 << n) - 1][m] << endl;

  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// #include <boost/multiprecision/cpp_int.hpp>
// typedef boost::multiprecision::cpp_int ll;
typedef long double dd;
#define i_7 (ll)(1E9 + 7)
// #define i_7 998244353
#define i_5 i_7 - 2
ll mod(ll a) {
  ll c = a % i_7;
  if (c >= 0)
    return c;
  return c + i_7;
}
typedef pair<ll, ll> l_l;
ll inf = (ll)1E16;
#define rep(i, l, r) for (ll i = l; i <= r; i++)
#define pb push_back
ll max(ll a, ll b) {
  if (a < b)
    return b;
  else
    return a;
}
ll min(ll a, ll b) {
  if (a > b)
    return b;
  else
    return a;
}
void Max(ll &pos, ll val) { pos = max(pos, val); } // Max(dp[n],dp[n-1]);
void Min(ll &pos, ll val) { pos = min(pos, val); }
void Add(ll &pos, ll val) { pos = mod(pos + val); }
dd EPS = 1E-9;
#define fastio                                                                 \
  ios::sync_with_stdio(false);                                                 \
  cin.tie(0);                                                                  \
  cout.tie(0);
////////////////////////////

int main() {
  fastio

      ll n,
      m;
  cin >> n >> m;

  ll dp[1 << n][m + 1]; // jまで見てiを開けるための最小cost
  rep(i, 0, (1 << n) - 1) rep(j, 0, m) dp[i][j] = inf;
  dp[0][0] = 0;
  rep(i, 1, m) {
    ll a, b;
    ll c = 0;
    cin >> a >> b;
    rep(x, 1, b) {
      ll p;
      cin >> p;
      p--;
      c += (1ll << p);
    }
    rep(j, 0, (1 << n) - 1) {
      Min(dp[j][i], dp[j][i - 1]);
      Min(dp[j | c][i], dp[j][i - 1] + a);
    }
    for (ll j = (1 << n) - 1; j >= 0; j--) {
      rep(k, 0, n - 1) {
        ll p = 1 << k;
        if (j & p) {
          ll next = j - p;
          Min(dp[next][i], dp[j][i]);
        }
      }
    }
  }
  /*
  rep(i,0,(1<<n)-1){
      rep(j,0,m){
          cout<<dp[i][j]<<" ";
      }cout<<endl;
  }
   */
  if (dp[(1 << n) - 1][m] == inf)
    cout << -1;
  else
    cout << dp[(1 << n) - 1][m] << endl;

  return 0;
}