Pagini recente » Cod sursa (job #2363508) | Cod sursa (job #1675335) | Cod sursa (job #2469609) | Cod sursa (job #970493) | Cod sursa (job #2762305)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n,k[100005],fin[100005],t[100005],rad;
vector<int>a,f[100005];
void citire()
{
in >> n;
for (int i = 1; i <= n; i++)
in >> k[i];
for (int i = 1; i < n; i++)
{
int x,y;
in >> x >> y;
f[x].push_back(y);
t[y] = x;
}
for (int i = 1; i <= n; i++)
if (t[i] == 0)
rad = i;
}
void rec(int p)
{
a.push_back(p);
if (k[p] == 0)
fin[p] = 0;
else
fin[p] = 1 + fin[a[a.size() - k[p] - 1]];
for (int i = 0; i < f[p].size(); i++)
{
rec(f[p][i]);
a.pop_back();
}
}
void afisare()
{
for (int i = 1; i <= n; i++)
out << fin[i] << " ";
}
int main()
{
citire();
rec(rad);
afisare();
return 0;
}