Cod sursa(job #2143033)

Utilizator Teodor.mTeodor Marchitan Teodor.m Data 25 februarie 2018 15:06:30
Problema Aprindere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;
 
ifstream in("aprindere.in");
ofstream out("aprindere.out");

struct intrerupator {
	int nrCamera;
	int timpActionare;
	int nrIntrerupatoare;
	vector< int > v;
};

int cmpFnc(const intrerupator &a, const intrerupator &b) {
	return a.nrCamera < b.nrCamera;
}

int main() {

	int n, m; in >> n >> m;

	vector< int > camere(n);
	for(auto& it: camere) in >> it;
	
	vector< intrerupator > intrerupatoare(m);
	for(int i = 0; i < m; ++i) {
		in >> intrerupatoare[i].nrCamera >> intrerupatoare[i].timpActionare >> intrerupatoare[i].nrIntrerupatoare;
		for(int j = 0; j < intrerupatoare[i].nrIntrerupatoare; ++j) {
			int x; in >> x;

			intrerupatoare[i].v.push_back(x);
		}

		sort(intrerupatoare[i].v.begin(), intrerupatoare[i].v.end());
	}

	sort(intrerupatoare.begin(), intrerupatoare.end(), cmpFnc);

	int ans = 0;
	for(int i = 0; i < m; ++i) {
		if(camere[intrerupatoare[i].nrCamera] == 0) {
			ans += intrerupatoare[i].timpActionare;

			for(int j = 0; j < intrerupatoare[i].nrIntrerupatoare; ++j) {
				camere[intrerupatoare[i].v[j]] = 1 - camere[intrerupatoare[i].v[j]];
			}
		}
	}

	out << ans << '\n';
 
    in.close(); out.close();
 
    return 0;
}