Pagini recente » Cod sursa (job #580934) | Cod sursa (job #749289) | Cod sursa (job #1493428) | Cod sursa (job #2471849) | Cod sursa (job #2142525)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aprindere.in");
ofstream out("aprindere.out");
// pair< int, int > camera are first = nr camerei si second starea ei
struct intrerupatoare {
int nrCamera;
int timpActionare;
int nrIntrerupatoare;
vector< int > localizare;
};
int cmpSort(const intrerupatoare &a, const intrerupatoare &b) {
if(a.nrIntrerupatoare == b.nrIntrerupatoare) {
if(a.timpActionare == b.timpActionare) {
return a.nrCamera < b.nrCamera;
} else {
return a.timpActionare < b.timpActionare;
}
}
return a.nrIntrerupatoare > b.nrIntrerupatoare;
}
void Tiparire(const vector< intrerupatoare > &localizareIntrerupatoare, int m) {
for(int i = 0; i < m; ++i) {
out << localizareIntrerupatoare[i].nrCamera << " " << localizareIntrerupatoare[i].timpActionare << " " << localizareIntrerupatoare[i].nrIntrerupatoare << " ";
for(int j = 0; j < localizareIntrerupatoare[i].nrIntrerupatoare; ++j) {
out << localizareIntrerupatoare[i].localizare[j] << " ";
}
out << '\n';
}
}
int main() {
int n, m; in >> n >> m;
vector< int > camere(n);
for(auto& it: camere) in >> it;
vector< intrerupatoare > localizareIntrerupatoare(m);
for(int i = 0; i < m; ++i) {
in >> localizareIntrerupatoare[i].nrCamera >> localizareIntrerupatoare[i].timpActionare >> localizareIntrerupatoare[i].nrIntrerupatoare;
for(int j = 0; j < localizareIntrerupatoare[i].nrIntrerupatoare; ++j) {
int x; in >> x;
localizareIntrerupatoare[i].localizare.push_back(x);
}
}
sort(localizareIntrerupatoare.begin(), localizareIntrerupatoare.end(), cmpSort);
//Tiparire(localizareIntrerupatoare, m); out << "\n\n";
int ans = 0;
for(int i = 0; i < m; ++i) {
bool ok = false;
for(int j = 0; j < localizareIntrerupatoare[i].nrIntrerupatoare; ++j) {
if(camere[localizareIntrerupatoare[i].localizare[j]] == 0)
ok = true;
}
if(ok == true) {
for(int j = 0; j < localizareIntrerupatoare[i].nrIntrerupatoare; ++j) {
if(camere[localizareIntrerupatoare[i].localizare[j]] == 0)
camere[localizareIntrerupatoare[i].localizare[j]] = 1;
else
camere[localizareIntrerupatoare[i].localizare[j]] = 0;
}
ans += localizareIntrerupatoare[i].timpActionare;
}
}
out << ans << '\n';
in.close(); out.close();
return 0;
}