Pagini recente » Monitorul de evaluare | Cod sursa (job #857863) | Cod sursa (job #1885936) | Cod sursa (job #166764) | Cod sursa (job #96651)
Cod sursa(job #96651)
#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;
}