Cod sursa(job #326784)

Utilizator Andrei200Andrei200 Andrei200 Data 26 iunie 2009 00:14:18
Problema Party Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <cstdio>
#include <cstring>

#define file_in "party.in"
#define file_out "party.out"

#define Nmax 1010

int n,s[Nmax],m,nr;
int x[Nmax],y[Nmax],z[Nmax],v[Nmax];

int ok()
{
	int i;

	for (i=1;i<=m;++i)
	{
		if (z[i]==0)
		{
			if (s[x[i]]==0 && s[y[i]]==0) return 0;
		}
		if (z[i]==1)
		{
			if (s[x[i]]==0 && s[y[i]]==1) return 0;
		}
		if (z[i]==2)
		{
			if (s[x[i]]==1 && s[y[i]]==0) return 0;
		}
		if (z[i]==3)
		{
			if (s[x[i]]==1 && s[y[i]]==1) return 0;
		}
	}
	
	return 1;
}
	

void subm()   
{   
int q,x,i,okk,nrr;   
s[n]=1;   
okk=1;
for (q=0;q<(1<<n)-1 && okk;++q)   
    {   
         
    x=n;   
    while (s[x])    
           {   
             s[x]=0;    
             x--;   
           }   
    s[x]=1;
/*	for (i=0;i<=n;++i)
		 printf("%d ", s[i]);
	printf("\n");*/
	nrr=0;
	for (i=1;i<=n;++i)
		 if (!s[i]) nrr++;
 	if (ok() && nrr!=n)
	{
		nr=0;
		for (i=1;i<=n;++i)
             if (s[i]) nr++,v[nr]=i;
        /*printf("%d\n", nr);
		//printf("%d\n", i); 
		for (i=1;i<=nr;++i)
       		printf("%d\n", v[i]);*/
		//okk=0;
    }  
}
}   


int main()
{
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n,&m);
	for (i=1;i<=m;++i)
		 scanf("%d %d %d", &x[i],&y[i],&z[i]);
	
	subm();
/*	printf("1\n");
	printf("12");*/
	printf("%d\n", nr);
		//printf("%d\n", i); 
	for (i=1;i<=nr;++i)
       		printf("%d\n", v[i]);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}