Pagini recente » Cod sursa (job #2804368) | Cod sursa (job #2915303) | Cod sursa (job #740501) | Cod sursa (job #586701) | Cod sursa (job #3278456)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream input("aprindere.in");
ifstream output("aprindere.out");
int N, M, T=0; //nr camere, nr intrerupatoare, t minim;
struct intrerupator {
int camera, timp, nrBecuri;
vector<int> camereAfectate;
intrerupator (int c, int t, int n) {
camera = c;
timp = t;
nrBecuri = n;
for (int i = 1; i <= n; i++) {
int x;
input >> x;
camereAfectate.push_back(x);
}
}
void afiseaza () {
cout << camera << " " << timp << " " << nrBecuri << " ";
for (int i = 0; i < nrBecuri; i++) {
cout << camereAfectate.at(i) << " ";
}
}
};
struct camera {
intrerupator intr = intrerupator(-1, 0, 0);
bool aprinsa;
camera (bool a) {
aprinsa = a;
}
void adgIntrerupator (intrerupator i) {
intr = i;
}
bool areIntrerupator () {
return intr.camera == -1 ? false : true;
}
};
vector<camera> camere;
vector<intrerupator> intr;
bool sortareCamereDupaNrDeCamereAfectate(camera A, camera B) {
return A.intr.nrBecuri <= B.intr.nrBecuri;
}
void trigger (camera A) {
if (A.areIntrerupator())
for (int i = 0; i < A.intr.nrBecuri; i++) {
camere.at(A.intr.camereAfectate.at(i)).aprinsa = !camere.at(A.intr.camereAfectate.at(i)).aprinsa;
}
}
int main()
{
input >> N >> M;
for (int i = 1; i <= N; i++) {
bool a;
input >> a;
camere.push_back(camera(a));
}
for (int i = 1; i <= M; i++) {
int c, t, n;
input >> c >> t >> n;
intrerupator x = intrerupator(c, t, n);
camere.at(c).adgIntrerupator(x);
intr.push_back(x);
}
//sort(camere.begin(), camere.end(), sortareCamereDupaNrDeCamereAfectate);
for (int i = 0; i < N; i++) {
camera it = camere.at(i);
if (!it.aprinsa && it.areIntrerupator()) {
trigger(camere.at(i));
T += camere.at(i).intr.timp;
}
}
output << T;
return 0;
}