Pagini recente » Cod sursa (job #2359349) | Cod sursa (job #1957729) | Cod sursa (job #2602415) | Cod sursa (job #1624440) | Cod sursa (job #3331006)
#include <bits/stdc++.h>
using namespace std;
struct Intrerupator {
int poz; // camera unde este întrerupătorul
int timp; // timpul de apăsare
int nr; // câte camere modifică
int c[105]; // camerele afectate
};
int main() {
ifstream fin("aprindere.in");
ofstream fout("aprindere.out");
int n, m;
fin >> n >> m;
int a[105]; // starea becurilor
for (int i = 0; i < n; i++)
fin >> a[i];
Intrerupator sw[105];
for (int i = 0; i < m; i++) {
fin >> sw[i].poz >> sw[i].timp >> sw[i].nr;
for (int j = 0; j < sw[i].nr; j++)
fin >> sw[i].c[j];
}
int sum = 0;
// parcurgem camerele în ordine
for (int i = 0; i < n; i++) {
// dacă becul e aprins, nu trebuie să facem nimic
if (a[i] == 1)
continue;
// căutăm cel mai ieftin întrerupător din camera i
int best = -1;
int bestT = 1e9;
for (int k = 0; k < m; k++) {
if (sw[k].poz == i && sw[k].timp < bestT) {
bestT = sw[k].timp;
best = k;
}
}
// dacă nu există întrerupător în camera i → imposibil
if (best == -1) {
fout << -1;
return 0;
}
// apăsăm întrerupătorul ales
sum += sw[best].timp;
// toggle pe camerele afectate
for (int j = 0; j < sw[best].nr; j++) {
int cam = sw[best].c[j];
a[cam] = 1 - a[cam];
}
}
fout << sum;
return 0;
}