Cod sursa(job #8395)

Utilizator ZeusCatalin Tiseanu Zeus Data 24 ianuarie 2007 18:36:38
Problema Aprindere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb

using namespace std;

#include <cstdio>
#include <algorithm>
#include <vector>

#define X first
#define Y second

int N, M, v[1010], apr[1010][110], C[1010], NR[1010], T[1010];

int main()
{
    freopen("aprindere.in", "r", stdin);
    freopen("aprindere.out", "w", stdout);
    
    scanf("%d %d", &N, &M);
    for( int i = 0; i < N; i++ )
         scanf("%d", v + i );
    
    vector< pair<int,int> > vp;
    
    for( int i = 0; i < M; i++ )
    {
         scanf( "%d %d %d", C + i, T + i, NR + i );
         for( int j = 0; j < NR[i]; j++ )
              scanf("%d", &apr[i][j] );
         vp.push_back( make_pair(C[i],i) );     
    }
    
    sort( vp.begin(), vp.end() );
    
    int ret(0);
    
    for( int i = 0; i < M; i++ )
    {
         int el = vp[ i ].Y, cmr = vp[ i ].X;
             
         if( v[ cmr ] )
             continue;    
         
         ret += T[ el ];
              
         for( int j = 0; j < NR[ el ]; j++ )
              v[ apr[ el ][ j ] ] ^= 1;
    }
    
    printf("%d\n", ret );
    
    return 0;
}