#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > g[10000];
int w[10000], vis[10000], ans[10000];
priority_queue<pair<int, int> > q[10000];
int min(int x, int y) {
  if (x < y) return x;
  return y;
}
void dfs(int s, int t) {
  vis[s] = 1;
  for (int i = 0; i < g[s].size(); i++) {
    if (!vis[g[s][i].first] && q[g[s][i].first].size() > 0) {
      int sz = min(g[s][i].second, q[g[s][i].first].size());
      while (sz--) {
        if (s == 0) {
          ans[q[g[s][i].first].top().second] = t;
        }
        q[s].push(q[g[s][i].first].top());
        q[g[s][i].first].pop();
      }
      dfs(g[s][i].first, t);
    }
  }
}
int main() {
  int n, i, s, t, v;
  while (cin >> n) {
    for (i = 0; i < n; i++) {
      cin >> w[i];
      q[i].push(make_pair(-w[i], i));
    }
    for (i = 0; i < n - 1; i++) {
      cin >> s >> t >> v;
      s--;
      t--;
      g[s].push_back(make_pair(t, v));
      g[t].push_back(make_pair(s, v));
    }
    int t = 1;
    ans[0] = 0;
    while (q[0].size() != n) {
      fill(vis, vis + n, 0);
      dfs(0, t);
      t++;
    }
    for (i = 0; i < n; i++) {
      printf("%d%c", ans[i], (i == n - 1) ? '\n' : ' ');
    }
  }
  return 0;
}
