Cod sursa(job #96651)

Utilizator znakeuJurba Andrei znakeu Data 2 noiembrie 2007 16:52:50
Problema Aprindere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>

int v[1001];
int ss[1001];
int se[1001];int sc[1001];//cost per switch
int sr[100000];//rooms affected by switch
int sp[1001];//is there a switch in room x?
int m,n,cost=0;

void aprindeo(int s, int scc)
{
	int i;
	if (s==n)
	{
		
		if (scc<cost || cost==0)
				cost=scc;		
	}
	else
	{
		if (v[s]==0)
			if(sp[s]==1)
			{
				scc+=sc[s];
				v[s]=1;
				for (i=ss[s]; i<se[s]; i++)
					v[sr[i]]=v[sr[i]] xor 1;
				aprindeo(s+1,scc);
				
			}
			else;
		else
			aprindeo(s+1,scc);
	}
}

int main()
{
	int i,j,a,b,c,l;
	
	FILE *in  = fopen("aprindere.in","r");
	FILE *out = fopen("aprindere.out","w");
	
	fscanf(in,"%d%d",&n,&m);
	for (i=0; i<n; i++)
		fscanf(in,"%d",&v[i]);
	
	for (i=0, j=0; i<m; i++)
	{
		fscanf(in,"%d%d%d",&a,&b,&c);
		sp[a]=1;
		ss[a]=j;
		se[a]=j+c;
		
		sc[a]=b;
		for (l=0; l<c; l++)
		{
			fscanf(in,"%d",&a);
			sr[j+l]=a;
		}
		j+=c;
	}
	aprindeo(0,0);
	fprintf(out,"%d\n",cost);
	
	return 0;
}