#include <bits/stdc++.h>
using namespace std;
int u[5001], v[5001], c[5001], c1[5001], c2[5001], parent[5001];
int n;
long a[5001];
int pos[5001], num[5001];
void dfs(int i) {
  for (int j = 0; j < n - 1; j++) {
    if (u[j] == i && parent[v[j]] == 0) {
      parent[v[j]] = i;
      c1[v[j]] = c[j];
      dfs(v[j]);
    }
    if (v[j] == i && parent[u[j]] == 0) {
      parent[u[j]] = i;
      c1[u[j]] = c[j];
      dfs(u[j]);
    }
  }
}
void qsort(int first, int last) {
  int i = first, j = last;
  long x = a[(i + j) / 2];
  do {
    while (a[i] < x) {
      i++;
    }
    while (a[j] > x) {
      j--;
    }
    if (i <= j) {
      if (i != j) {
        swap(a[i], a[j]);
        swap(pos[i], pos[j]);
        swap(num[i], num[j]);
      }
      i++;
      j--;
    }
  } while (i <= j);
  if (i < last) {
    qsort(i, last);
  }
  if (j > first) {
    qsort(first, j);
  }
}
int main() {
  int t[5001], t1;
  bool act[5001];
  int i, j;
  scanf("%i", &n);
  for (i = 0; i < n; i++) {
    scanf("%i", &a[i]);
    pos[i] = i + 1;
    num[i] = i;
    act[i] = 1;
  }
  for (i = 0; i < n - 1; i++) {
    scanf("%i", &v[i]);
    scanf("%i", &u[i]);
    scanf("%i", &c[i]);
  }
  t1 = 0;
  for (i = 0; i <= n; i++) {
    parent[i] = 0;
  }
  parent[1] = -1;
  dfs(1);
  qsort(0, n - 1);
  for (i = 0; i < n; i++) {
    if (pos[i] == 1) {
      act[i] = 0;
      t[num[i]] = 0;
    }
  }
  int left = n - 1;
  while (left > 0) {
    t1++;
    for (i = 2; i <= n; i++) {
      c2[i] = c1[i];
    }
    for (i = 0; i < n; i++) {
      if (act[i] && c2[pos[i]] > 0) {
        c2[pos[i]]--;
        pos[i] = parent[pos[i]];
        if (pos[i] == 1) {
          left--;
          t[num[i]] = t1;
          act[i] = 0;
        }
      }
    }
  }
  for (i = 0; i < n; i++) {
    printf("%i ", t[i]);
  }
  return 0;
}
