Pagini recente » Cod sursa (job #2499039) | Cod sursa (job #3159119) | Cod sursa (job #888154) | Cod sursa (job #1468211) | Cod sursa (job #6625)
Cod sursa(job #6625)
#include<stdio.h>
const int maxn = 100010;
const int maxn2 = 30;
int k[maxn];
int mat[maxn2][maxn];
int i,j;
int n;
int x;
int p;
int y;
int nr[maxn];
int f;
int k1;
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&k[i]);
}
for(j=1; j <= n-1; ++j)
{
scanf("%d %d",&x,&y);
mat[0][y]=x;
}
for(p = 2, i = 1; p <= n; p<<=1 )
{
for( j = 1; j <= n; j++ )
{
mat[i][j] = mat[i-1][mat[i-1][j]];
}
}
for( i = 1; i <= n; i++)
{
f=i;
while(k[f])
{
if (f<i)
{
nr[i]+=nr[f];
break;
}
nr[i]++;
x=k[f];
while ( x )
{
for(p=1, k1=0; p<=x ; ++k1, p<<=1);
p>>=1;
k1--;
x-=p;
f=mat[k1][f];
}
}
}
for( i = 1; i <= n; i++)
{
printf("%d ", nr[i]);
}
printf("\n");
return 0;
}