#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > g[200100];
int d[200100], tot;
long long a[200100];
int seen[200100];
int n, m, x, p;
int dfs1(int x) {
  int r = 1;
  for (int i = 0; i < g[x].size(); i++) {
    int k = dfs1(g[x][i].first);
    r += k;
  }
  d[x] = r;
  return r;
}
void dfs(int x, long long val) {
  if (val > a[x]) {
    tot += d[x];
    return;
  }
  for (int i = 0; i < g[x].size(); i++) {
    int p = g[x][i].second;
    int u = g[x][i].first;
    if (val > 0)
      dfs(u, 1ll * p + val);
    else
      dfs(u, p);
  }
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  m = n - 1;
  for (int i = 0; i < m; i++) {
    cin >> x >> p;
    g[x].push_back(make_pair(i + 2, p));
  }
  dfs1(1);
  dfs(1, 0);
  cout << tot;
  return 0;
}
