Cod sursa(job #200061)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 22 iulie 2008 01:07:44
Problema Aprindere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#define IN "aprindere.in"
#define OUT "aprindere.out"
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define N_MAX 1001

bool on[N_MAX];
int cam[N_MAX];
short int a[N_MAX][N_MAX]; 
int N,M;

void scan()
{
	int x;
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	scanf("%d%d", &N,&M);
	FOR(i,0,N-1)
		scanf("%d ",&on[i]);
	FOR(i,1,M)
	{
		scanf("%d", &x);
		cam[x] = i;
		scanf("%d %d",&a[i][0],&a[i][1]);
		FOR(j,1,a[i][1])
			scanf("%d ",&a[i][j+1]);
	}		
}

void solve()
{
	int sol=0;
	/*FOR(i,0,N-1)
		printf("%d ",on[i]);
	printf("\n");
	FOR(i,0,N)
		if( cam[i] )
		{
			printf("in camera %d este un intrerupator de timp : %d cu %d camere\n",i,a[ cam[i] ][0],a[ cam[i] ][1]);
			FOR(j,1,a[ cam[i] ][1] )
				printf("%d ", a[ cam[i] ][j+1]);
			printf("\n");
		}	
	*/
	FOR(i,0,N)
	{
		if(!on[i])
		{
			sol += a[ cam[i] ][0];
			FOR(j,1,a[ cam[i] ][1])
				if(on[ a[ cam[i] ][j+1]])
					on[ a[ cam[i] ][j+1]] = 0;
				else
					on[ a[ cam[i] ][j+1]] = 1;
				
			//FOR(i,0,N-1)
			//	printf("%d ",on[i]);
			//printf("\n");	
		}
	}	
	printf("%d\n", sol);	
}

int main()
{
	scan();
	solve();
	return 0;
}