Cod sursa(job #304130)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 10 aprilie 2009 23:44:46
Problema Party Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <algorithm>
#include <ctime>
#define FIN "party.in"
#define FOUT "party.out"
#define MAX 110
using namespace std;
int valoare[MAX];
struct prop{int tip,x,y;} v[1010];
int N,M;

int main(void){

	freopen(FIN,"rt",stdin);
	freopen(FOUT,"wt",stdout);

	scanf("%d%d",&N,&M);

	for (int i=1;i<=M;++i){

		scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].tip);
	}

	fclose(stdin);

	srand(time(NULL));

	for (int i=1;i<=N;++i){

		valoare[i]=rand()%2;
	}

	int ok=1;
	while (ok){

		ok=0;
		for (int i=1;i<=M;++i){
			if (v[i].tip==0){

				if (valoare[v[i].x]==0 && valoare[v[i].y]==0){
					int x=rand()%2;
					if (x){ valoare[v[i].x]=1;} else {valoare[v[i].y]=1;}
					++ok;
				}
			} else if (v[i].tip==1){

				if (valoare[v[i].x]==0 && valoare[v[i].y]==1){ valoare[v[i].y]=0; ++ok;}
			} else if (v[i].tip==2){
				if (valoare[v[i].y]==0 && valoare[v[i].x]==1){ valoare[v[i].x]=0; ++ok;}
			} else {
				if (valoare[v[i].x]==1 && valoare[v[i].y]==1) {
					++ok;
					int x=rand()%2;
					if (x){ valoare[v[i].x]=0;} else {valoare[v[i].y]=0;}
				}
			}
		}
	}
	int nrinv=0;

	for (int i=1;i<=N;++i) nrinv+=valoare[i];
	printf("%d\n",nrinv);

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

	fclose(stdout);
	return 0;
}