Cod sursa(job #997333)

Utilizator DorelBarbuBarbu Dorel DorelBarbu Data 13 septembrie 2013 19:41:31
Problema Aprindere Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <cstdio>
#define MAX_N 1010
#define MAX_M 1010
#define MAX_NR 110
#define MAX_T 1010
using namespace std;

int N , M , NR , T , C , stare[MAX_N] , sw[MAX_M][MAX_NR], timpi[MAX_N] ;

void citire()
{
    freopen("aprindere.in", "r", stdin);

    scanf( "%d %d" , &N , &M ) ;

    int i , j , t , aux ;


    for( i = 0 ; i < N ; i++ )
    {
        scanf( "%d" , &stare[i] ) ;
    }


    for( i = 0 ; i < M ; i++ )
    {
        scanf( "%d %d %d " , &C , &t , &NR ) ;

        timpi[C] = t ;

        sw[C][C] = 1 ;

        for( j = 1 ; j <= NR ; j++ )
        {
            scanf( "%d" , &aux ) ;

            sw[C][aux] = 1 ;
        }
    }


}

void trigger_switch( int j )
{
    int i ;

    for( i = 0 ; i < N ; i++ )
    {
        if( sw[j][i] == 1 )//daca switchul j afecteaza camera i schimb starea camerei i
        {
            if( stare[i] == 1 )
            {
                stare[i] = 0 ;
            }
            else
            {
                stare[i] = 1 ;
            }
        }
    }
}
int solve()
{
    int sol = 0 , i, j, t, t_min, ales = -1 , k ;

    for( i = 0 ; i < N ; i++ )
    {
        if ( stare[i] == 0 )//daca lumina este stinsa
        {
            trigger_switch(i);

            sol += timpi[i] ;
        }
    }

    return sol ;
}

int main()
{
    freopen("aprindere.out","w",stdout);

    citire();

    printf("%d", solve() ) ;

    return 0 ;
}