#include <bits/stdc++.h>
using namespace std;
int a[200005];
long long ac[200005];
int ans[200005];
vector<pair<int, int> > ch[200005];
class BIT {
 private:
  int n_;
  long long bit[200005];

 public:
  void init(int n) {
    n_ = n;
    for (int(i) = (0); (i) < (n + 1); (i)++) {
      bit[i] = 0;
    }
  }
  void update(int x, long long v) {
    for (int i = x; i <= n_; i += (i & -i)) {
      bit[i] += v;
    }
  }
  long long query(int x) {
    long long res = 0;
    for (int i = x; i > 0; i -= (i & -i)) {
      res += bit[i];
    }
    return res;
  }
} mBit;
void dfs(int x, long long d, int de, BIT &bit) {
  ac[de] = d;
  int from_dep = lower_bound(ac, ac + de, ac[de] - a[x]) - ac;
  bit.update(from_dep + 1, 1);
  bit.update(de + 1, -1);
  for (int(i) = (0); (i) < (((int)ch[x].size())); (i)++) {
    int son = ch[x][i].first;
    int wei = ch[x][i].second;
    dfs(son, d + wei, de + 1, bit);
  }
  ans[x] = bit.query(de + 1);
  bit.update(de + 1, -ans[x]);
  bit.update(de + 2, ans[x]);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int(i) = (0); (i) < (n); (i)++) {
    scanf("%d", &a[i]);
  }
  for (int(i) = (0); (i) < (n - 1); (i)++) {
    int p, w;
    scanf("%d%d", &p, &w);
    p--;
    ch[p].push_back(make_pair(i + 1, w));
  }
  mBit.init(n);
  dfs(0, 0LL, 0, mBit);
  for (int(i) = (0); (i) < (n); (i)++) {
    if (i) putchar(' ');
    printf("%d", ans[i]);
  }
}
