Cod sursa(job #949348)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 13 mai 2013 15:33:36
Problema Algoritmul lui Euclid extins Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
using namespace std;
FILE  *fcin=fopen("honest.in","r");
FILE  *fcout=fopen("honest.out","w");
struct node
{
	int nr;
	int h;
	node *next;
}*v[1001];
bool pred[1001]; int q[1001];
int honest[1001];
int c,i,n,s,x;

void result ()
{
    if (c>=0) for (i=1;i<=n;i++) {fprintf(fcout,"%d\n",(honest[i]+1)/2);}
	else for (i=1;i<=n;i++) {fprintf(fcout,"%d\n",1-(honest[i]+1)/2);}
}

int main ()
{
    char h;
	node *d;
	fscanf(fcin,"%d %d",&n,&s);
	for (i=1;i<=s;i++)
    {
		d=new node;
		fscanf(fcin,"%d %c %d",&x,&h,&d->nr);
		d->next=v[x];
		v[x]=d;
		if (h=='c') d->h=1;
		else d->h=-1;
		pred[d->nr]=1;
	}
	int p,u; p=1; u=1;
	for (i=1;i<=n;i++) if (pred[i]==0) {q[u]=i;break;}
	honest[q[p]]=1; c=1;
	while (1)
	{
		for (d=v[q[p]];d!=NULL;d=d->next)
		{
			if (honest[d->nr]==0)
			{
			    q[++u]=d->nr;
			    honest [d->nr]=honest[q[p]]*d->h;
			    c=c+honest[d->nr];
			    if (u==n) {result(); return 0;}
			}
		}
		p++;
	}
}