Pagini recente » Cod sursa (job #1877468) | Cod sursa (job #2340307) | Cod sursa (job #2664672) | Cod sursa (job #2422039) | Cod sursa (job #2430815)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("aprindere.in");
ofstream fout("aprindere.out");
int N,M;
int f[1005];
struct switcher
{
int ss;
int time;
int nr;
int v[1005];
int need = 0;
};
switcher vec[1005];
void Read()
{
fin>>N>>M;
for(int i = 0;i<N;i++)
fin>>f[i];
for(int i = 1;i<=M;i++)
{
fin>>vec[i].ss>>vec[i].time>>vec[i].nr;
for(int j = 1;j<=vec[i].nr;j++)
{
fin>>vec[i].v[j];
if(f[vec[i].v[j]] == 0)
vec[i].need++;
}
}
}
bool CMP(switcher a,switcher b)
{
if(a.need == b.need)
return a.time > b.time;
return a.need > b.need;
}
bool cmp(int i)
{
for(int j =1;j<=vec[i].nr;j++)
if(f[vec[i].v[j]] == 0)
return 1;
return 0;
}
int main()
{
long long sum = 0;
Read();
/*for(int i =1;i<=M;i++)
fout<<vec[i].ss<<" "<<vec[i].need<<"\n";*/
int dark = 0;
for(int i = 0;i<N;i++)
if(f[i]==0)
dark++;
while(dark)
{
sort(vec+1,vec+M+1,CMP);
for(int i = 1;i<=M;i++)
{
if(cmp(i))
{
for(int j=1;j<=vec[i].nr;j++)
if(f[vec[i].v[j]] == 1)
{
f[vec[i].v[j]] = 0;
dark++;
vec[i].need++;
}
else
{
f[vec[i].v[j]] = 1;
dark--;
vec[i].need--;
}
sum = sum +vec[i].time;
}
}
}
fout<<sum<<"\n";
return 0;
}