Cod sursa(job #166746)

Utilizator razvi9Jurca Razvan razvi9 Data 28 martie 2008 14:24:56
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include<cstdio>
#include<vector>
std::vector<int> a[100001];
int n,i,s[100001],r[100001],st[1000],x,y;
void get(int vf,int niv)
{
	if(s[vf]==0) r[vf]=0;
	else r[vf]=r[st[niv-s[vf]]]+1;
	st[niv]=vf;
	for(int i=0;i<a[vf].size();i++)
		get(a[vf][i],niv+1);

}
int main()
{
	freopen("cerere.in","r",stdin);
	freopen("cerere.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&s[i]);
	for(i=1;i<n;i++){
		scanf("%d %d",&x,&y);
		a[x].push_back(y);
		r[y]=1;}
	i=1;
	while(r[i])i++;
	get(i,1);
	for(i=1;i<=n;i++)
		printf("%d ",r[i]);
	fclose(stdout);
	return 0;
}