Pagini recente » Cod sursa (job #2171681) | Cod sursa (job #2859432) | Cod sursa (job #2281165) | Cod sursa (job #2292888) | Cod sursa (job #2635116)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int t[100001];
int k[100001];
vector <int> v[100001];
int s[100001];
int dp[100001];
void dfs(int r)
{
s[++s[0]] = r;
if (k[r] > 0)
dp[r] = 1 + dp[s[s[0]-k[r]]];
for (int i = 0; i<v[r].size(); i++)
dfs(v[r][i]);
s[0]--;
}
int main()
{
int n, i, x, y;
fin >> n;
for (i = 1; i<=n; i++)
fin >> k[i];
for (i = 1; i<n; i++)
{
fin >> x >> y;
t[y] = x;
v[x].push_back(y);
}
int r = 1;
for (r = 1; t[r]; r++);
dfs(r);
for (i = 1; i<=n; i++)
fout << dp[i] << ' ';
return 0;
}