5
27468 7465 74275 40573 40155
112071 76270 244461 264202 132397
1 777133331
2 107454154
3 652330694
4 792720519
 5
78188 56310 79021 70050 65217
115040 5149 128449 98357 36580
1 451393770
2 574046602
3 590130784
4 112514248
 7
1 1 1 1 1 1 1
1 3000000000 3000000000 3000000000 1000000000 1000000000 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
 10
2 8 6 1 2 7 6 9 2 8
4 9 4 3 5 2 9 3 7 3
1 8
2 8
3 8
4 10
5 1
6 4
7 3
8 10
9 2
 11
1 1 1 1 1 1 1 1 1 1 1
1 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
 5
2 1 1 2 3
1 2 2 2 1
1 2
1 3
2 4
1 4

NO
 NO
 NO
 YES
 NO
 NO

#include <bits/stdc++.h>
using lint = long long int;
using pll = std::pair<lint, lint>;
using std::vector;
vector<pll> graph[100100];
vector<lint> bb, aa;
lint ans = 0;
bool check_ans = true;
lint check_val = 1000000000000000000LL;
lint dfs(int cur, int par, lint par_val) {
  lint cur_need = bb[cur - 1] - aa[cur - 1];
  lint cur_val = 1;
  for (int i = 0; i < graph[cur].size(); i++) {
    if (graph[cur][i].first != par) {
      cur_need += dfs(graph[cur][i].first, cur, graph[cur][i].second);
    } else {
      cur_val = graph[cur][i].second;
    }
  }
  if (cur_need < 0) {
    if (check_val / par_val < (-cur_need)) {
      check_ans = false;
    }
    return cur_need * par_val;
  } else {
    return cur_need / cur_val;
  }
}
int main(void) {
  int N;
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) {
    lint temp;
    scanf("%lld", &temp);
    bb.push_back(temp);
  }
  for (int i = 1; i <= N; i++) {
    lint temp;
    scanf("%lld", &temp);
    aa.push_back(temp);
  }
  for (int i = 2; i <= N; i++) {
    lint t1, t2;
    scanf("%lld %lld", &t1, &t2);
    graph[t1].push_back(pll(i, t2));
    graph[i].push_back(pll(t1, 1));
  }
  for (int i = 1; i <= N; i++) {
    if (graph[i].size() == 1) {
      ans = dfs(i, 0, 1);
      break;
    }
  }
  if (!check_ans) {
    printf("NO");
  } else if (ans < 0) {
    printf("NO");
  } else {
    printf("YES");
  }
  return 0;
}
