Pagini recente » Cod sursa (job #1103041) | Cod sursa (job #895681) | Cod sursa (job #2833000) | Cod sursa (job #1579138) | Cod sursa (job #78799)
Cod sursa(job #78799)
#include <stdio.h>
#include <vector>
const int n_max = 100001;
using namespace std;
vector <int> v[n_max];
int a, b, i ,n, root;
int m[n_max],
stiv[n_max],
s[n_max],
p[n_max];
int find_root(int x)
{
while (p[x] != 0)
x = p[x];
return x;
}
void df(int x)
{
vector <int>::iterator it;
stiv[++stiv[0]] = x;
s[x] = s[stiv[stiv[0]-m[x]]] + 1;
for (it = v[x].begin(); it != v[x].end(); ++ it)
df(*it);
stiv[0] --;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++ i)
scanf("%d",&m[i]);
for (i = 1; i < n; ++ i)
{
scanf("%d %d", &a, &b);
v[a].push_back(b);
p[b] = a;
}
root = find_root(1);
df(root);
for (i = 1; i <= n; ++ i)
printf("%d ",s[i]-1);
return 0;
}