Pagini recente » Cod sursa (job #556022) | Cod sursa (job #2706278) | Cod sursa (job #459959) | Cod sursa (job #1708903) | Cod sursa (job #166758)
Cod sursa(job #166758)
#include<cstdio>
#include<vector>
std::vector<int> a[100001];
int n,i,s[100001],r[100001],st[100001],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);
}
char buf[100],*p;
void getpair()
{
gets(buf);
p=buf;
while(*p==' ')p++;
x=0;
while(*p>='0' && *p<='9'){x=x*10+*p-'0';p++;}
while(*p==' ')p++;
y=0;
while(*p>='0' && *p<='9'){y=y*10+*p-'0';p++;}
}
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]);
scanf(" ");
for(i=1;i<n;i++){
getpair();
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;
}