#include<bits/stdc++.h>
#define N 300010
using namespace std;
vector<int>e[N];
int dep[N], n, m, x, y, fa[N][30], a[N], s[N];
void build(int x) {
for (int i = 1; i <= 20; i++)fa[x][i] = fa[fa[x][i - 1]][i - 1];
for (auto i : e[x]) {
if (i == fa[x][0])continue;
fa[i][0] = x;
dep[i] = dep[x] + 1;
build(i);
}
}
int lca(int u, int v) {
if (dep[u] > dep[v])swap(u, v);
int l = 21;
while (dep[u] < dep[v]) {
// cout << u << " " << v << "\n";
l--;
if (fa[v][l] == 0)continue;
if (dep[fa[v][l]] >= dep[u])v = fa[v][l];
}
// cout << u << " " << v << "\n";
// cout << dep[u] << " " << dep[v] << "\n";
if (u == v)return u;
for (int i = 20; i >= 0; i--) {
if (fa[u][i] != fa[v][i]) {
u = fa[u][i];
v = fa[v][i];
}
}
return fa[u][0];
}
void reqzh(int x) {
for (auto i : e[x]) {
if (i == fa[x][0])continue;
reqzh(i);
a[x] += a[i];
}
}
int main() {
// cin.tie(0);
// ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++)cin >> s[i];
for (int i = 1; i < n; i++) {
cin >> x >> y;
e[x].push_back(y);
e[y].push_back(x);
}
dep[1] = 1;
build(1);
// cout << lca(1, 4);
for (int i = 2; i <= n; i++) {
int l = lca(s[i - 1], s[i]);
if (l == s[i - 1]) {
a[fa[s[i - 1]][0]]--;
a[s[i]]++;
} else if (l == s[i]) {
a[fa[s[i]][0]]--;
a[s[i - 1]]++;
} else {
a[s[i - 1]]++;
a[s[i]]++;
a[fa[l][0]] -= 2;
}
// for (int i = 1; i <= n; i++)cout << a[i] << " ";
// cout << "\n";
}
reqzh(1);
for (int i = 2; i <= n; i++)a[s[i]]--;
a[s[n]]--;
for (int i = 1; i <= n; i++)cout << a[i] << "\n";
return 0;
}