Cod sursa(job #475755)

Utilizator aladinaladin aladinn aladin Data 8 august 2010 13:17:41
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>	
#define N 10003
int v[N],ok[N],c[N+10],a[N],b[N],n,i,x=0,y=0,s=0;;

void   coad( int k)
{
	int p;
	if (v[k]!=0) 
	{ p=y-v[k]; if (p<0) p=N+p+1; ok[k]=c[p];}
	v[k]=-1;
	for (p=1;p<n;++p)
		if (a[p]==k) { ++y; if (y>N) y-=N+1; c[y]=b[p]; coad(b[p]);}
	y--;
    if (y<0) y=N+p+1;

		
}
		

int main()
{
	
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;++i) scanf("%d",&v[i]);
	for (i=1;i<n;++i) 
	{
		scanf("%d %d",&a[i],&b[i]);
		s+=b[i];
	}
	s=(n*(n+1))/2-s;
	c[y]=s;
	coad(1);
	for (i=1;i<=n;++i)
	{
		s=i;v[i]=0;
		while (ok[s]!=0)	++v[i],s=ok[s];
		printf("%d ",v[i]);
	}
	return 0;}