Pagini recente » Cod sursa (job #2453914) | Cod sursa (job #3120889) | Cod sursa (job #3124967) | Cod sursa (job #2966043) | Cod sursa (job #3298743)
#include <bits/stdc++.h>
using namespace std;
ifstream fcin("cerere.in");
ofstream fcout("cerere.out");
typedef long long ll;
const int N = 1e5 + 5;
int mystack[N], v[N], r[N], f[N];
int n, a, b, dr, rad;
ll s;
vector<vector<int>> h(N);
void DFS1(int nod)
{
mystack[++dr] = nod;
r[nod] = mystack[dr - v[nod]];
for (int e : h[nod])
DFS1(e);
dr--;
}
void DFS2(int nod)
{
f[nod] = 1 + f[r[nod]];
for (int e : h[nod])
DFS2(e);
}
int main()
{
fcin >> n;
s = 1ll * n * (n + 1) / 2;
for (int i = 1; i <= n; i++)
fcin >> v[i];
for (int i = 1; i < n; i++)
{
fcin >> a >> b;
s -= b;
h[a].push_back(b);
}
rad = s;
DFS1(rad);
DFS2(rad);
for (int i = 1; i <= n; i++)
fcout << f[i] - 1 << ' ';
fcin.close();
fcout.close();
return 0;
}