#include <bits/stdc++.h>
using namespace std;
long long int mod = 1e9 + 7;
void fillsz(int s, int p, int sz[], list<pair<int, long long int>> *adj) {
  sz[s] = 1;
  for (auto itr = adj[s].begin(); itr != adj[s].end(); itr++) {
    int v = (*itr).first;
    if (v != p) {
      fillsz(v, s, sz, adj);
      sz[s] += sz[v];
    }
  }
}
void dfs(int s, int p, list<pair<int, long long int>> *adj, int sz[], int &ans,
         long long int sum, long long int arr[]) {
  if (sum > arr[s]) {
    ans += sz[s];
    return;
  }
  for (auto itr = adj[s].begin(); itr != adj[s].end(); itr++) {
    int v = (*itr).first;
    long long int wt = (*itr).second;
    if (v != p) {
      wt = max(sum + wt, wt);
      dfs(v, s, adj, sz, ans, wt, arr);
    }
  }
}
int main() {
  int n;
  cin >> n;
  long long int arr[n];
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }
  int sz[n];
  list<pair<int, long long int>> *adj = new list<pair<int, long long int>>[n];
  for (int i = 1; i < n; i++) {
    int u = i;
    long long int wt;
    int v;
    cin >> v >> wt;
    v--;
    adj[u].push_back(make_pair(v, wt));
    adj[v].push_back(make_pair(u, wt));
  }
  fillsz(0, -1, sz, adj);
  int ans = 0;
  for (auto itr = adj[0].begin(); itr != adj[0].end(); itr++) {
    dfs((*itr).first, 0, adj, sz, ans, (*itr).second, arr);
  }
  cout << ans;
}
