#include <bits/stdc++.h>
using namespace std;
vector<bool> used;
vector<priority_queue<pair<int, int>, vector<pair<int, int> >,
                      greater<pair<int, int> > > >
    st;
vector<vector<int> > G;
int c[5555][5555];
int pred[5555];
void dfs(int u, int pred) {
  used[u] = true;
  if (u != 0) {
    int fl = c[u][pred];
    for (int iter = (0); iter <= ((fl)-1); iter++) {
      if (st[u].size() == 0) break;
      st[pred].push(st[u].top());
      st[u].pop();
    }
  }
  for (int i = (0); i <= (((int)((G[u]).end() - (G[u]).begin())) - 1); i++)
    if (!used[G[u][i]]) dfs(G[u][i], u);
}
vector<int> res;
int iter = 0, tot = 0;
void formAns() {
  while (st[0].size() > 0) {
    tot++;
    res[st[0].top().second] = iter;
    st[0].pop();
  }
  iter++;
}
int main() {
  int n;
  scanf("%d", &n);
  vector<int> a(n);
  for (int i = (0); i <= ((n)-1); i++) scanf("%d", &a[i]);
  G.resize(n);
  for (int i = (0); i <= ((n - 1) - 1); i++) {
    int u, v, cc;
    scanf("%d%d%d", &u, &v, &cc);
    u--;
    v--;
    G[u].push_back(v);
    G[v].push_back(u);
    c[u][v] = c[v][u] = cc;
  }
  st.resize(n);
  for (int i = (0); i <= ((n)-1); i++) st[i].push(make_pair(a[i], i));
  res.assign(n, 0);
  while (tot < n) {
    formAns();
    used.assign(n, false);
    dfs(0, -1);
  }
  for (int i = (0); i <= (((int)((res).end() - (res).begin())) - 1); i++) {
    if (i) printf(" ");
    printf("%d", res[i]);
  }
  puts("");
  return 0;
}
