Pagini recente » Cod sursa (job #1445218) | Cod sursa (job #2661292) | Borderou de evaluare (job #3332150) | Cod sursa (job #1734226) | Cod sursa (job #3331505)
#include <fstream>
using namespace std;
ifstream cin("aprindere.in");
ofstream cout("aprindere.out");
struct Intrerupator {
int poz;
int timp;
int nr;
int cam[1005];
};
int N, M;
int a[1005]; // starea becurilor
Intrerupator v[1005]; // intrerupatoarele
int main() {
cin >> N >> M;
// citire stare initiala becuri
for (int i = 0; i < N; i++)
cin >> a[i];
// citire intrerupatoare
for (int i = 0; i < M; i++) {
cin >> v[i].poz >> v[i].timp >> v[i].nr;
for (int j = 0; j < v[i].nr; j++)
cin >> v[i].cam[j];
}
// sortare intrerupatoare dupa pozitie (bubble sort - simplu)
for (int i = 0; i < M - 1; i++) {
for (int j = i + 1; j < M; j++) {
if (v[i].poz > v[j].poz) {
Intrerupator aux = v[i];
v[i] = v[j];
v[j] = aux;
}
}
}
long long suma = 0;
// algoritm greedy
for (int i = 0; i < M; i++) {
int p = v[i].poz;
if (a[p] == 0) {
suma += v[i].timp;
for (int j = 0; j < v[i].nr; j++) {
int c = v[i].cam[j];
a[c] = 1 - a[c]; // toggle
}
}
}
cout << suma << "\n";
return 0;
}