#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define re exit(0);
const int maxn = 100009;
const int LOG = 16;
int n,arr[maxn];
int u[maxn],v[maxn],w[maxn];
ll sum[maxn],sparse[maxn][LOG + 1];
ll res;
bool check(int l,int r) {
int i = __lg(r - l + 1);
ll tmp = min(sparse[l][i],sparse[r - (1 << i) + 1][i]);
return tmp - sum[l - 1] >= 0;
}
void dnc(int l,int r) {
if (l == r) {
res += (sum[l] - sum[l - 1]) >= 0;
return;
}
int mid = (l + r) >> 1;
dnc(l,mid);
dnc(mid + 1,r);
vector <ll> storing;
for (int i = mid;i >= l;i--) if (check(i,mid)) {
storing.push_back(sum[mid] - sum[i - 1]);
}
sort(storing.begin(),storing.end());
ll need = 0,currsum = 0;
for (int i = mid + 1;i <= r;i++) {
currsum += sum[i] - sum[i - 1];
if (currsum < 0) {
need += abs(currsum);
currsum = 0;
}
res += storing.end() - lower_bound(storing.begin(),storing.end(),need);
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
// freopen(".inp","r",stdin);
// freopen(".out","w",stdout);
cin >> n;
if (n == 1) {
cout << 0;
return 0;
}
for (int i = 1;i <= n;i++) {
cin >> arr[i];
}
for (int i = 1;i < n;i++) {
cin >> u[i] >> v[i] >> w[i];
}
//u -> v
for (int i = 1;i <= n;i++) {
sum[i] = arr[i];
}
for (int i = 1;i < n;i++) {
sum[min(u[i],v[i])] -= w[i];
}
for (int i = 1;i <= n;i++) {
sum[i] += sum[i - 1];
sparse[i][0] = sum[i];
}
for (int j = 1;j <= LOG;j++) {
for (int i = 1;i + (1 << j) - 1 <= n;i++) {
sparse[i][j] = min(sparse[i][j - 1],sparse[i + (1 << (j - 1))][j - 1]);
}
}
dnc(1,n - 1);
//v -> u
for (int i = 1;i <= n;i++) {
sum[i] = arr[i];
}
for (int i = 1;i < n;i++) {
sum[max(u[i],v[i])] -= w[i];
}
reverse(sum + 1,sum + 1 + n);
for (int i = 1;i <= n;i++) {
sum[i] += sum[i - 1];
sparse[i][0] = sum[i];
}
for (int j = 1;j <= LOG;j++) {
for (int i = 1;i + (1 << j) - 1 <= n;i++) {
sparse[i][j] = min(sparse[i][j - 1],sparse[i + (1 << (j - 1))][j - 1]);
}
}
dnc(1,n - 1);
cout << res;
}