// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "color"
/*END OF TEMPLATE. ICEBEAR AND THE CAT WILL WIN VOI26 */
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 2e5 + 5;
int numNode, numEdge;
vector<int> G[N];
int color[N], cnt[N], diff_color;
vector<int> colors;
void add(int u) {
if (++cnt[color[u]] == 1) {
diff_color++;
colors.pb(color[u]);
}
}
void del(int u) {
if (--cnt[color[u]] == 0) {
diff_color--;
colors.pop_back();
}
}
namespace Subtask1 {
bool check() {
return numNode <= 5000;
}
int ans[N];
void dfs(int root, int u, int par) {
add(u);
ans[root] += diff_color;
for(int v : G[u]) if (v != par) dfs(root, v, u);
del(u);
}
void solve() {
FOR(i, 1, numNode) {
dfs(i, i, -1);
cout << ans[i] << ' ';
}
}
}
namespace Subtask5 {
int sz[N];
bool isCentroid[N];
int ans[N];
int get_sz(int u, int par) {
sz[u] = 1;
for(int v : G[u]) if (v != par && !isCentroid[v])
sz[u] += get_sz(v, u);
return sz[u];
}
int findCentroid(int u, int par, const int &subtree) {
for(int v : G[u]) if (v != par && !isCentroid[v] && sz[v] * 2 > subtree)
return findCentroid(v, u, subtree);
return u;
}
int countNode, sumDiff, contain[N], f[N];
void prepare(int u, int par) {
add(u);
f[u] = diff_color;
sumDiff += diff_color;
countNode++;
for(int &c : colors) contain[c]++;
for(int v : G[u]) if (v != par && !isCentroid[v]) prepare(v, u);
del(u);
}
void updateTree(int u, int par, int sign) {
add(u);
countNode += sign;
sumDiff += diff_color * sign;
for(int &c : colors) contain[c] += sign;
for(int v : G[u]) if (v != par && !isCentroid[v])
updateTree(v, u, sign);
del(u);
}
void solve(int u, int par) {
add(u);
ans[u] += f[u] * countNode + sumDiff;
for(int &c : colors) ans[u] -= contain[c]; // outside subtree
for(int v : G[u]) if (v != par && !isCentroid[v]) solve(v, u);
del(u);
}
void reset(int u, int par) {
contain[color[u]] = 0;
for(int v : G[u]) if (v != par && !isCentroid[v])
reset(v, u);
}
void buildCentroid(int u) {
int centroid = findCentroid(u, -1, get_sz(u, -1));
isCentroid[centroid] = true;
sumDiff = countNode = 0;
add(centroid);
prepare(centroid, -1);
for(int &v : G[centroid]) if (!isCentroid[v]) {
updateTree(v, centroid, -1);
solve(v, centroid);
updateTree(v, centroid, +1);
}
ans[centroid] += sumDiff;
del(centroid);
reset(centroid, -1);
for(int &v : G[centroid]) if (!isCentroid[v])
buildCentroid(v);
}
void solve() {
buildCentroid(1);
FOR(i, 1, numNode) cout << ans[i] << ' ';
}
}
void init(void) {
int subtask; cin >> subtask;
cin >> numNode >> numEdge;
FOR(i, 1, numNode) cin >> color[i];
FOR(i, 1, numEdge) {
int u, v, w;
cin >> u >> v >> w;
G[u].pb(v);
G[v].pb(u);
}
}
void process(void) {
if (Subtask1 :: check()) Subtask1 :: solve();
else Subtask5 :: solve();
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
// cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhID4gYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsKICAgICAgICBpZiAoYSA8IGIpIHJldHVybiBhID0gYiwgdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgRk9SUihpLGEsYikgZm9yKGludCBpPShhKTsgaT49KGIpOyAtLWkpCiNkZWZpbmUgUkVQKGksIG4pIGZvcihpbnQgaT0wOyBpPChuKTsgKytpKQojZGVmaW5lIFJFRChpLCBuKSBmb3IoaW50IGk9KG4pLTE7IGk+PTA7IC0taSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVChTLCBpKSAoKChTKSA+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJjb2xvciIKLypFTkQgT0YgVEVNUExBVEUuIElDRUJFQVIgQU5EIFRIRSBDQVQgV0lMTCBXSU4gVk9JMjYgKi8KCmNvbnN0IGludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBpbnQgaW5mID0gMWU5ICsgMjcwOTIwMDg7CmNvbnN0IGxsIElORiA9IDFlMTggKyAyNzA5MjAwODsKY29uc3QgaW50IE4gPSAyZTUgKyA1OwppbnQgbnVtTm9kZSwgbnVtRWRnZTsKdmVjdG9yPGludD4gR1tOXTsKaW50IGNvbG9yW05dLCBjbnRbTl0sIGRpZmZfY29sb3I7CnZlY3RvcjxpbnQ+IGNvbG9yczsKCnZvaWQgYWRkKGludCB1KSB7CiAgICBpZiAoKytjbnRbY29sb3JbdV1dID09IDEpIHsKICAgICAgICBkaWZmX2NvbG9yKys7CiAgICAgICAgY29sb3JzLnBiKGNvbG9yW3VdKTsKICAgIH0KfQoKdm9pZCBkZWwoaW50IHUpIHsKICAgIGlmICgtLWNudFtjb2xvclt1XV0gPT0gMCkgewogICAgICAgIGRpZmZfY29sb3ItLTsKICAgICAgICBjb2xvcnMucG9wX2JhY2soKTsKICAgIH0KfQoKbmFtZXNwYWNlIFN1YnRhc2sxIHsKICAgIGJvb2wgY2hlY2soKSB7CiAgICAgICAgcmV0dXJuIG51bU5vZGUgPD0gNTAwMDsKICAgIH0KICAgIGludCBhbnNbTl07CiAgICB2b2lkIGRmcyhpbnQgcm9vdCwgaW50IHUsIGludCBwYXIpIHsKICAgICAgICBhZGQodSk7CiAgICAgICAgYW5zW3Jvb3RdICs9IGRpZmZfY29sb3I7CiAgICAgICAgZm9yKGludCB2IDogR1t1XSkgaWYgKHYgIT0gcGFyKSBkZnMocm9vdCwgdiwgdSk7CiAgICAgICAgZGVsKHUpOwogICAgfQoKICAgIHZvaWQgc29sdmUoKSB7CiAgICAgICAgRk9SKGksIDEsIG51bU5vZGUpIHsKICAgICAgICAgICAgZGZzKGksIGksIC0xKTsKICAgICAgICAgICAgY291dCA8PCBhbnNbaV0gPDwgJyAnOwogICAgICAgIH0KICAgIH0KfQoKbmFtZXNwYWNlIFN1YnRhc2s1IHsKICAgIGludCBzeltOXTsKICAgIGJvb2wgaXNDZW50cm9pZFtOXTsKICAgIGludCBhbnNbTl07CgogICAgaW50IGdldF9zeihpbnQgdSwgaW50IHBhcikgewogICAgICAgIHN6W3VdID0gMTsKICAgICAgICBmb3IoaW50IHYgOiBHW3VdKSBpZiAodiAhPSBwYXIgJiYgIWlzQ2VudHJvaWRbdl0pCiAgICAgICAgICAgIHN6W3VdICs9IGdldF9zeih2LCB1KTsKICAgICAgICByZXR1cm4gc3pbdV07CiAgICB9CgogICAgaW50IGZpbmRDZW50cm9pZChpbnQgdSwgaW50IHBhciwgY29uc3QgaW50ICZzdWJ0cmVlKSB7CiAgICAgICAgZm9yKGludCB2IDogR1t1XSkgaWYgKHYgIT0gcGFyICYmICFpc0NlbnRyb2lkW3ZdICYmIHN6W3ZdICogMiA+IHN1YnRyZWUpCiAgICAgICAgICAgIHJldHVybiBmaW5kQ2VudHJvaWQodiwgdSwgc3VidHJlZSk7CiAgICAgICAgcmV0dXJuIHU7CiAgICB9CgogICAgaW50IGNvdW50Tm9kZSwgc3VtRGlmZiwgY29udGFpbltOXSwgZltOXTsKICAgIHZvaWQgcHJlcGFyZShpbnQgdSwgaW50IHBhcikgewogICAgICAgIGFkZCh1KTsKICAgICAgICBmW3VdID0gZGlmZl9jb2xvcjsKICAgICAgICBzdW1EaWZmICs9IGRpZmZfY29sb3I7CiAgICAgICAgY291bnROb2RlKys7CiAgICAgICAgZm9yKGludCAmYyA6IGNvbG9ycykgY29udGFpbltjXSsrOwogICAgICAgIGZvcihpbnQgdiA6IEdbdV0pIGlmICh2ICE9IHBhciAmJiAhaXNDZW50cm9pZFt2XSkgcHJlcGFyZSh2LCB1KTsKICAgICAgICBkZWwodSk7CiAgICB9CgogICAgdm9pZCB1cGRhdGVUcmVlKGludCB1LCBpbnQgcGFyLCBpbnQgc2lnbikgewogICAgICAgIGFkZCh1KTsKICAgICAgICBjb3VudE5vZGUgKz0gc2lnbjsKICAgICAgICBzdW1EaWZmICs9IGRpZmZfY29sb3IgKiBzaWduOwogICAgICAgIGZvcihpbnQgJmMgOiBjb2xvcnMpIGNvbnRhaW5bY10gKz0gc2lnbjsKICAgICAgICBmb3IoaW50IHYgOiBHW3VdKSBpZiAodiAhPSBwYXIgJiYgIWlzQ2VudHJvaWRbdl0pCiAgICAgICAgICAgIHVwZGF0ZVRyZWUodiwgdSwgc2lnbik7CiAgICAgICAgZGVsKHUpOwogICAgfQoKICAgIHZvaWQgc29sdmUoaW50IHUsIGludCBwYXIpIHsKICAgICAgICBhZGQodSk7CiAgICAgICAgYW5zW3VdICs9IGZbdV0gKiBjb3VudE5vZGUgKyBzdW1EaWZmOwogICAgICAgIGZvcihpbnQgJmMgOiBjb2xvcnMpIGFuc1t1XSAtPSBjb250YWluW2NdOyAvLyBvdXRzaWRlIHN1YnRyZWUKICAgICAgICBmb3IoaW50IHYgOiBHW3VdKSBpZiAodiAhPSBwYXIgJiYgIWlzQ2VudHJvaWRbdl0pIHNvbHZlKHYsIHUpOwogICAgICAgIGRlbCh1KTsKICAgIH0KCiAgICB2b2lkIHJlc2V0KGludCB1LCBpbnQgcGFyKSB7CiAgICAgICAgY29udGFpbltjb2xvclt1XV0gPSAwOwogICAgICAgIGZvcihpbnQgdiA6IEdbdV0pIGlmICh2ICE9IHBhciAmJiAhaXNDZW50cm9pZFt2XSkKICAgICAgICAgICAgcmVzZXQodiwgdSk7CiAgICB9CgogICAgdm9pZCBidWlsZENlbnRyb2lkKGludCB1KSB7CiAgICAgICAgaW50IGNlbnRyb2lkID0gZmluZENlbnRyb2lkKHUsIC0xLCBnZXRfc3oodSwgLTEpKTsKICAgICAgICBpc0NlbnRyb2lkW2NlbnRyb2lkXSA9IHRydWU7CgogICAgICAgIHN1bURpZmYgPSBjb3VudE5vZGUgPSAwOwoKICAgICAgICBhZGQoY2VudHJvaWQpOwogICAgICAgIHByZXBhcmUoY2VudHJvaWQsIC0xKTsKCiAgICAgICAgZm9yKGludCAmdiA6IEdbY2VudHJvaWRdKSBpZiAoIWlzQ2VudHJvaWRbdl0pIHsKICAgICAgICAgICAgdXBkYXRlVHJlZSh2LCBjZW50cm9pZCwgLTEpOwogICAgICAgICAgICBzb2x2ZSh2LCBjZW50cm9pZCk7CiAgICAgICAgICAgIHVwZGF0ZVRyZWUodiwgY2VudHJvaWQsICsxKTsKICAgICAgICB9CgogICAgICAgIGFuc1tjZW50cm9pZF0gKz0gc3VtRGlmZjsKICAgICAgICBkZWwoY2VudHJvaWQpOwogICAgICAgIHJlc2V0KGNlbnRyb2lkLCAtMSk7CgogICAgICAgIGZvcihpbnQgJnYgOiBHW2NlbnRyb2lkXSkgaWYgKCFpc0NlbnRyb2lkW3ZdKQogICAgICAgICAgICBidWlsZENlbnRyb2lkKHYpOwogICAgfQoKICAgIHZvaWQgc29sdmUoKSB7CiAgICAgICAgYnVpbGRDZW50cm9pZCgxKTsKICAgICAgICBGT1IoaSwgMSwgbnVtTm9kZSkgY291dCA8PCBhbnNbaV0gPDwgJyAnOwogICAgfQp9Cgp2b2lkIGluaXQodm9pZCkgewogICAgaW50IHN1YnRhc2s7IGNpbiA+PiBzdWJ0YXNrOwogICAgY2luID4+IG51bU5vZGUgPj4gbnVtRWRnZTsKICAgIEZPUihpLCAxLCBudW1Ob2RlKSBjaW4gPj4gY29sb3JbaV07CiAgICBGT1IoaSwgMSwgbnVtRWRnZSkgewogICAgICAgIGludCB1LCB2LCB3OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBHW3VdLnBiKHYpOwogICAgICAgIEdbdl0ucGIodSk7CiAgICB9Cn0KCnZvaWQgcHJvY2Vzcyh2b2lkKSB7CiAgICBpZiAoU3VidGFzazEgOjogY2hlY2soKSkgU3VidGFzazEgOjogc29sdmUoKTsKICAgIGVsc2UgU3VidGFzazUgOjogc29sdmUoKTsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpbnQgdGMgPSAxOwovLyAgICBjaW4gPj4gdGM7CiAgICB3aGlsZSh0Yy0tKSB7CiAgICAgICAgaW5pdCgpOwogICAgICAgIHByb2Nlc3MoKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==