Cod sursa(job #1310506)

Utilizator asavoaeigeoAsavoaei Georgiana asavoaeigeo Data 6 ianuarie 2015 22:11:44
Problema Aprindere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>

using namespace std;
ifstream fin("aprindere.in");
ofstream fout("aprindere.out");
int v[1001];//configuratia initiala
int X[1001];//x[i]=costul intrerupatorului din camera i (0 daca nu exista)
int cam[1001][101];//cam[i][1..101] camerele pe care le schimba intrerupatorul din camera i ; cam[i][0] = NUMARUL ASTEA DE CAMERE,le-am tinut aici ca sa accesez usor
int main()
{
    int n,m,i,j,intrerupator,cost,nrcam;
    long long sol=0;//nr de solutii depaseste int,is multe,te-ai fi prins dupa ca luai doar 40 cu int
    fin>>n>>m;
    for(i=1;i<=n;i++) fin>>v[i]; //citim configuratia initiala;
    for(i=1;i<=m;i++)
    {
        fin>>intrerupator>>cost>>nrcam;
        X[intrerupator]=cost;//x[i]=costul intrerupatorului din camera i (0 daca nu exista),cum am zis;
        cam[intrerupator][0]=nrcam;//cam[i][0] = NUMARUL ASTEA DE CAMERE,le-am tinut aici ca sa accesez usor,cum am zis;
        for(j=1;j<=nrcam/*sau cam[intrerupator][0]*/;j++)
        {
            fin>>cam[intrerupator][j];//citim camerele care le schimba intrerupatorul din camera asta;
        }
    }
    for(i=1;i<=n;i++)
    {
        if(v[1]==0) //daca e becul stins
        {
            v[i]=1;//il aprindem,sigur exista un intrerupator in camera i;
            sol+=X[i];//costul care l-am retinut in X,cum am zis;
            for(j=1;j<=cam[i][0]/*sau nrcam la camera i*/;j++)
            {
                if(v[j]==0) v[j]=1;//daca era stins ,aprindem;
                else v[j]=1;//daca era aprins,stingem;
            }
        }
    }
    fout<<sol;
}