Cod sursa(job #568629)

Utilizator rootsroots1 roots Data 31 martie 2011 15:40:33
Problema Party Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define Dim1 1001
#define Dim2 101

struct vector
{
	int op,x,y;
}v[Dim1];

char use[Dim2];

int main()
{
	int N,M,i,nr,ok;

	freopen("party.in","r",stdin);

	scanf("%d%d",&N,&M);
	for(i=1;i<=M;i++) scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].op);

	for(i=1;i<=N;i++) use[i]=rand()%2;
	while(1)
	{
		use[rand()%N+1]=rand()%2;
		ok=1;
		for(i=1;i<=M;i++)
			if(v[i].op==0)
			{
				if(use[v[i].x]|use[v[i].y]==0)
				{
					ok=0;
					use[v[i].y]=1;
					break;
				}
			}
			else
			if(v[i].op==1)
			{
				if(use[v[i].x]==0&&use[v[i].y]!=0)
				{
					ok=0;
					use[v[i].y]=0;
					break;
				}
			}
			else
			if(v[i].op==2)
			{
				if(use[v[i].y]==0&&use[v[i].x]!=0)
				{
					ok=0;
					use[v[i].x]=0;
					break;
				}
			}
			else
			if(v[i].op==3)
			{
				if(use[v[i].x]&use[v[i].y]==1)
				{
					ok=0;
					use[v[i].x]=0;
					break;
				}
			}

		nr=0;
		for(i=1;i<=N;i++) nr+=use[i];
		if(ok&&nr) break;
	}

	freopen("party.out","w",stdout);

	printf("%d\n",nr);
	for(i=1;i<=N;i++)
		if(use[i]) printf("%d\n",i);

	return 0;
}