Cod sursa(job #2020296)

Utilizator mouse_wirelessMouse Wireless mouse_wireless Data 9 septembrie 2017 19:25:22
Problema Aprindere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.22 kb
#include <cstdio>
#include <cstdlib>
#include <cassert>
#include <vector>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <climits>
using namespace std;
typedef long long LL;

#ifdef INFOARENA
#define ProblemName "aprindere"
#endif

#define MCONCAT(A, B) A B
#ifdef ProblemName
#define InFile MCONCAT(ProblemName, ".in")
#define OuFile MCONCAT(ProblemName, ".out")
#else
#define InFile "fis.in"
#define OuFile "fis.out"
#endif

const int MAXN = 1010;
bool v[MAXN];

pair< int, vector<int> > sw[MAXN];

int main() {
  assert(freopen(InFile, "r", stdin));
  assert(freopen(OuFile, "w", stdout));
  int N, M;
  scanf("%d%d", &N, &M);
  for (int i = 0; i < N; ++i) {
    int a;
    scanf("%d", &a);
    v[i] = (a != 0);
    sw[i].first = -1;
  }
  while (M--) {
    int c, tc, nc;
    scanf("%d%d%d", &c, &tc, &nc);
    sw[c].first = tc;
    sw[c].second.resize(nc);
    for (int i = 0; i < nc; ++i)
      scanf("%d", &sw[c].second[i]);
  }
  int ans = 0;
  for (int i = 0; i < N; ++i) {
    if (v[i])
      continue;
    assert(sw[i].first >= 0);
    ans += sw[i].first;
    for (const auto &it : sw[i].second)
      v[it] = !v[it];
  }
  printf("%d\n", ans);
  return 0;
}