Cod sursa(job #430615)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 31 martie 2010 10:48:03
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<cstdio>
int n,ori,lung,nec[1<<17],t[1<<17],str[1<<17],fin[1<<17];
void dfs(int i,int l)
{
	if(l==nec[ori])
	{
		str[ori]=i;
		return;
	}
	dfs(t[i],l+1);
}
void inte(int i)
{
	if(nec[i]==0)
		return;
	lung++;
	inte(str[i]);
}
int main()
{
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&nec[i]);
	for(int i=1;i<n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		t[y]=x;
	}
	for(int i=1;i<=n;i++)
	{
		ori=i;
		dfs(i,0);
	}
	for(int i=1;i<=n;i++)
	{
		lung=0;
		inte(i);
		fin[i]=lung;
	}
	for(int i=1;i<=n;i++)
		printf("%d ",fin[i]);
	return 0;
}