Pagini recente » Cod sursa (job #2864909) | Cod sursa (job #2334692) | Cod sursa (job #803459) | Cod sursa (job #182540) | Cod sursa (job #1064613)
#include<cstdio>
using namespace std;
const int NMAX = 100005;
int N;
int K[NMAX];
int Sol[NMAX];
int T[NMAX][18];
int afla(int x)
{
if(Sol[x] || K[x]==0) return Sol[x];
int i,j=x;
for(i=0;(1<<i)<=K[x];i++)
{
if((K[x] & (1<<i)) == 0) continue;
j=T[j][i];
}
Sol[x] = Sol[j] + 1;
return Sol[x];
}
int main()
{
int i,j,a,b;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&K[i]);
for(i=1;i<=N-1;i++)
{
scanf("%d%d",&a,&b);
T[b][0]=a;
}
for(i=1;(1<<i)<=N;i++)
for(j=1;j<=N;j++)
T[j][i]=T[T[j][i-1]][i-1];
for(i=1;i<=N;i++)
{
printf("%d ",afla(i));
}
return 0;
}