Cod sursa(job #2430819)

Utilizator mirceatlxhaha haha mirceatlx Data 16 iunie 2019 16:53:17
Problema Aprindere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#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)
{

    return a.ss < b.ss;
}

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();
sort(vec+1,vec+M+1,CMP);
   /* for(int i =1;i<=M;i++)
        fout<<vec[i].ss<<" "<<vec[i].need<<"\n";*/

    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;
                    vec[i].need++;
                }
                else
                {
                    f[vec[i].v[j]] = 1;
                    vec[i].need--;
                }
            sum = sum +vec[i].time;
        }



    }

    fout<<sum<<"\n";
    return 0;
}