#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e5+5;
int n, m;
vector<int> g[maxn];
int color[maxn];
long long ans[maxn];
// DSU on Tree variables
map<int,int>* cnt[maxn]; // pointer to map<int,int> cho subtree
int subtree[maxn]; // kích thước subtree
// DFS chuẩn bị kích thước subtree
void dfs_size(int u, int p) {
subtree[u] = 1;
for(auto v : g[u]) if(v != p) {
dfs_size(v,u);
subtree[u] += subtree[v];
}
}
// DFS DSU on Tree
void dfs(int u, int p, bool keep) {
int mx = -1, bigChild = -1;
for(auto v : g[u]) if(v != p && subtree[v] > mx) {
mx = subtree[v];
bigChild = v;
}
for(auto v : g[u]) if(v != p && v != bigChild)
dfs(v,u,false); // xử lý nhánh nhỏ trước
if(bigChild != -1) dfs(bigChild,u,true), cnt[u] = cnt[bigChild];
else cnt[u] = new map<int,int>();
(*cnt[u])[color[u]]++;
for(auto v : g[u]) if(v != p && v != bigChild) {
for(auto &pr : *cnt[v]) (*cnt[u])[pr.first] += pr.second;
}
// Tính ans[u] = tổng số màu trên mọi đường từ u tới các đỉnh subtree
// Ở đây mỗi màu count 1 cho mỗi đỉnh, ta cần số màu distinct = cnt[u].size()
ans[u] = 0;
for(auto &pr : *cnt[u]) {
ans[u] += pr.second;
}
if(!keep) delete cnt[u]; // xóa nhánh nhỏ
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m; // m = n-1
for(int i=1;i<=n;i++) cin >> color[i];
for(int i=0;i<m;i++){
int u,v,w; cin >> u >> v >> w;
g[u].push_back(v);
g[v].push_back(u);
}
dfs_size(1,0);
dfs(1,0,true);
for(int i=1;i<=n;i++){
cout << ans[i] << " ";
}
cout << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbWF4biA9IDRlNSs1OwppbnQgbiwgbTsKdmVjdG9yPGludD4gZ1ttYXhuXTsKaW50IGNvbG9yW21heG5dOwpsb25nIGxvbmcgYW5zW21heG5dOwoKLy8gRFNVIG9uIFRyZWUgdmFyaWFibGVzCm1hcDxpbnQsaW50PiogY250W21heG5dOyAvLyBwb2ludGVyIHRvIG1hcDxpbnQsaW50PiBjaG8gc3VidHJlZQppbnQgc3VidHJlZVttYXhuXTsgICAgICAgLy8ga8OtY2ggdGjGsOG7m2Mgc3VidHJlZQoKLy8gREZTIGNodeG6qW4gYuG7iyBrw61jaCB0aMaw4bubYyBzdWJ0cmVlCnZvaWQgZGZzX3NpemUoaW50IHUsIGludCBwKSB7CiAgICBzdWJ0cmVlW3VdID0gMTsKICAgIGZvcihhdXRvIHYgOiBnW3VdKSBpZih2ICE9IHApIHsKICAgICAgICBkZnNfc2l6ZSh2LHUpOwogICAgICAgIHN1YnRyZWVbdV0gKz0gc3VidHJlZVt2XTsKICAgIH0KfQoKLy8gREZTIERTVSBvbiBUcmVlCnZvaWQgZGZzKGludCB1LCBpbnQgcCwgYm9vbCBrZWVwKSB7CiAgICBpbnQgbXggPSAtMSwgYmlnQ2hpbGQgPSAtMTsKICAgIGZvcihhdXRvIHYgOiBnW3VdKSBpZih2ICE9IHAgJiYgc3VidHJlZVt2XSA+IG14KSB7CiAgICAgICAgbXggPSBzdWJ0cmVlW3ZdOwogICAgICAgIGJpZ0NoaWxkID0gdjsKICAgIH0KCiAgICBmb3IoYXV0byB2IDogZ1t1XSkgaWYodiAhPSBwICYmIHYgIT0gYmlnQ2hpbGQpCiAgICAgICAgZGZzKHYsdSxmYWxzZSk7IC8vIHjhu60gbMO9IG5ow6FuaCBuaOG7jyB0csaw4bubYwoKICAgIGlmKGJpZ0NoaWxkICE9IC0xKSBkZnMoYmlnQ2hpbGQsdSx0cnVlKSwgY250W3VdID0gY250W2JpZ0NoaWxkXTsKICAgIGVsc2UgY250W3VdID0gbmV3IG1hcDxpbnQsaW50PigpOwoKICAgICgqY250W3VdKVtjb2xvclt1XV0rKzsKCiAgICBmb3IoYXV0byB2IDogZ1t1XSkgaWYodiAhPSBwICYmIHYgIT0gYmlnQ2hpbGQpIHsKICAgICAgICBmb3IoYXV0byAmcHIgOiAqY250W3ZdKSAoKmNudFt1XSlbcHIuZmlyc3RdICs9IHByLnNlY29uZDsKICAgIH0KCiAgICAvLyBUw61uaCBhbnNbdV0gPSB04buVbmcgc+G7kSBtw6B1IHRyw6puIG3hu41pIMSRxrDhu51uZyB04burIHUgdOG7m2kgY8OhYyDEkeG7iW5oIHN1YnRyZWUKICAgIC8vIOG7niDEkcOieSBt4buXaSBtw6B1IGNvdW50IDEgY2hvIG3hu5dpIMSR4buJbmgsIHRhIGPhuqduIHPhu5EgbcOgdSBkaXN0aW5jdCA9IGNudFt1XS5zaXplKCkKICAgIGFuc1t1XSA9IDA7CiAgICBmb3IoYXV0byAmcHIgOiAqY250W3VdKSB7CiAgICAgICAgYW5zW3VdICs9IHByLnNlY29uZDsKICAgIH0KCiAgICBpZigha2VlcCkgZGVsZXRlIGNudFt1XTsgLy8geMOzYSBuaMOhbmggbmjhu48KfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGNpbiA+PiBuID4+IG07IC8vIG0gPSBuLTEKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBjaW4gPj4gY29sb3JbaV07CgogICAgZm9yKGludCBpPTA7aTxtO2krKyl7CiAgICAgICAgaW50IHUsdix3OyBjaW4gPj4gdSA+PiB2ID4+IHc7CiAgICAgICAgZ1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgZ1t2XS5wdXNoX2JhY2sodSk7CiAgICB9CgogICAgZGZzX3NpemUoMSwwKTsKICAgIGRmcygxLDAsdHJ1ZSk7CgogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGNvdXQgPDwgYW5zW2ldIDw8ICIgIjsKICAgIH0KICAgIGNvdXQgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9Cg==
NDYgNDUKMjMgMjEgMjAgOSAyNiAxMCAyNiA0MSAxNSA0MSAyMSA0MSAyMyAzOCA0MyAzMSAzIDE0IDcgMjMgNDMgNDQgMjcgMTQgMTggNDIgMjEgMzcgNDUgMjUgMTEgMjQgNDIgMjAgMTYgMjcgMjUgNDMgNDYgMTAgMTEgMzggMzAgMzIgNDEgMzkKMiAxIDg2CjMgMSA1Ngo0IDMgMzgKNSAyIDk4CjYgMSAzMQo3IDIgOTEKOCAzIDM4CjkgNCA5OQoxMCA4IDUxCjExIDMgOAoxMiAxMCA5OQoxMyAxIDUyCjE0IDYgODQKMTUgNyA3NAoxNiA3IDQ4CjE3IDExIDQwCjE4IDEwIDU4CjE5IDEwIDgzCjIwIDE3IDg0CjIxIDUgODEKMjIgMiA4MwoyMyAxOCA5MgoyNCA2IDMxCjI1IDQgMjIKMjYgMTYgOTAKMjcgMjYgNzIKMjggMjAgOTcKMjkgMTYgNjQKMzAgMjIgNzIKMzEgMTcgODYKMzIgNCA0OQozMyAyNiAxCjM0IDMgNTgKMzUgNCA3MgozNiAyMCAyNgozNyAxMyA1MAozOCAxMSA3NQozOSAxOCAzCjQwIDEwIDY5CjQxIDQwIDg0CjQyIDM5IDY0CjQzIDkgNDIKNDQgMTMgNjAKNDUgMTcgODQKNDYgMTMgMTgK
46 45
23 21 20 9 26 10 26 41 15 41 21 41 23 38 43 31 3 14 7 23 43 44 27 14 18 42 21 37 45 25 11 24 42 20 16 27 25 43 46 10 11 38 30 32 41 39
2 1 86
3 1 56
4 3 38
5 2 98
6 1 31
7 2 91
8 3 38
9 4 99
10 8 51
11 3 8
12 10 99
13 1 52
14 6 84
15 7 74
16 7 48
17 11 40
18 10 58
19 10 83
20 17 84
21 5 81
22 2 83
23 18 92
24 6 31
25 4 22
26 16 90
27 26 72
28 20 97
29 16 64
30 22 72
31 17 86
32 4 49
33 26 1
34 3 58
35 4 72
36 20 26
37 13 50
38 11 75
39 18 3
40 10 69
41 40 84
42 39 64
43 9 42
44 13 60
45 17 84
46 13 18