Cod sursa(job #262075)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 18 februarie 2009 23:06:57
Problema Cerere Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#define max 100000
long s[max], x[max], t[max], d[max], n;
struct elem
{       long vf;
	elem *urm;
}	*a[max], *q;
FILE *f, *g;

void read()
{       long i, k, l;
	f=fopen("cerere.in", "r");
	fscanf(f, "%ld", &n);
	for(i=1; i<=n; i++)
		fscanf(f, "%ld", &t[i]);
	for(i=1; i<=n; i++)
	{	fscanf(f, "%ld%ld", &k, &l);
		q=new elem;
		d[l]=1;
		q->vf=l;
		q->urm=a[k];
		a[k]=q;
	}
}

void solve(long k)
{	long z, y, nr;
	z=s[k]; y=z;
	nr=0;
	while(t[z]!=0)
	{	k-=t[z];
		z=s[k];
		nr++;
	}
	x[y]=nr;
}

void df(long z, long k)
{       elem *q;
	s[k]=z;
	solve(k);
	q=a[z];
	while(q)
	{       df(q->vf, k+1);
		q=q->urm;
	}
}

int main()
{       long i;
	read();
	for(i=1; i<=n; i++)
		if(d[i]==0)
			df(i, 1);
	g=fopen("cerere.out", "w");
	for(i=1; i<=n; i++)
		fprintf(g, "%ld ", x[i]);
	fprintf(f, "\n");
	fclose(g);
	return 0;
}