#include <bits/stdc++.h>
using namespace std;
#define maxn 300520
int n;
int a[maxn], b[maxn], d[maxn], fa[maxn][25];
vector <int>edges[maxn];
void dfs(int u, int f) {
d[u] = d[f] + 1;
fa[u][0] = f;
for (int i = 0; fa[u][i] != 0; i++) {
fa[u][i + 1] = fa[fa[u][i]][i];
}
for (int v : edges[u]) {
if (v == f) continue;
dfs(v, u);
}
}
int lca(int u, int v) {
if (d[u] < d[v]) swap(u, v);
for (int i = 19; i >= 0; i--) {
if (d[fa[u][i]] >= d[v]) {
u = fa[u][i];
}
}
if (u == v) return v;
for (int i = 19; i >= 0; i--) {
if (fa[u][i] != fa[v][i]) {
u = fa[u][i];
v = fa[v][i];
}
}
}
void sum(int u, int f) {
for (int v : edges[u]) {
if (v == f) continue;
sum(v, u);
b[u] += b[v];
}
}
int main () {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i < n; i++) {
int x, y;
cin >> x >> y;
edges[x].push_back(y);
edges[y].push_back(x);
}
dfs(1, 0);
for (int i = 1; i < n; i++) {
int u = a[i], v = a[i + 1];
int l = lca(u, v);
b[u]++, b[v]++;
b[l]--, b[fa[l][0]]--;
}
sum(1, 0);
for (int i = 2; i <= n; i++) {
b[a[i]]--;
}
for (int i = 1; i <= n; i++) {
cout << b[i] << '\n';
}
return 0;
}