#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
const int M = 2e5 + 5;
// Sort lại các cạnh tăng dần theo trọng số
// Khi đó xét đến cạnh thứ i thì luôn đảm bảo w(i) là lớn nhất trong số các cạnh đã được thêm
// Khi thêm cạnh i thì đếm số cặp (u, v) mà có đường đi đi qua cạnh i
// => DSU
// O(số truy vấn * n)
// Nhận xét 2: Xét 2 truy vấn i, j sao cho q(i) < q(j)
// Từ truy vấn thứ i, ta có thể thêm vào một số cạnh để có được đáp án của truy vấn thứ j
// => Sort lại các truy vấn tăng dần theo q và dùng kĩ thuật Hai con trỏ
// O(số truy vấn + n)
struct Edge {
int u, v, w;
bool operator<(const Edge& other) const {
return w < other.w;
}
};
struct Query {
int q, idx;
bool operator<(const Query& other) const {
return q < other.q;
}
};
int n, m;
vector<Edge> edges;
vector<Query> queries;
int p[N], sz[N];
void initSet() {
for (int u = 1; u <= n; u++) {
p[u] = u;
sz[u] = 1;
}
}
int findSet(int u) {
if (p[u] == u) return u;
return p[u] = findSet(p[u]);
}
ll unionSet(int u, int v) {
u = findSet(u);
v = findSet(v);
if (u == v) return 0;
if (sz[u] < sz[v]) swap(u, v);
ll cnt = 1ll * sz[u] * sz[v];
p[v] = u;
sz[u] += sz[v];
return cnt;
}
ll ans[M];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < n - 1; i++) {
int u, v, w;
cin >> u >> v >> w;
edges.push_back({u, v, w});
}
for (int i = 0; i < m; i++) {
int q; cin >> q;
queries.push_back({q, i});
}
sort(edges.begin(), edges.end());
sort(queries.begin(), queries.end());
initSet();
ll cur_ans = 0;
for (int i = 0, j = 0; i < m; i++) {
int q = queries[i].q, idx = queries[i].idx;
while (j < n - 1 && edges[j].w <= q) {
cur_ans += unionSet(edges[j].u, edges[j].v);
j++;
}
ans[idx] = cur_ans;
}
for (int i = 0; i < m; i++) cout << ans[i] << " \n"[i == m - 1];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAyZTUgKyA1OyAKY29uc3QgaW50IE0gPSAyZTUgKyA1OyAKCi8vIFNvcnQgbOG6oWkgY8OhYyBj4bqhbmggdMSDbmcgZOG6p24gdGhlbyB0cuG7jW5nIHPhu5EKLy8gS2hpIMSRw7MgeMOpdCDEkeG6v24gY+G6oW5oIHRo4bupIGkgdGjDrCBsdcO0biDEkeG6o20gYuG6o28gdyhpKSBsw6AgbOG7m24gbmjhuqV0IHRyb25nIHPhu5EgY8OhYyBj4bqhbmggxJHDoyDEkcaw4bujYyB0aMOqbQovLyBLaGkgdGjDqm0gY+G6oW5oIGkgdGjDrCDEkeG6v20gc+G7kSBj4bq3cCAodSwgdikgbcOgIGPDsyDEkcaw4budbmcgxJFpIMSRaSBxdWEgY+G6oW5oIGkKLy8gPT4gRFNVCi8vIE8oc+G7kSB0cnV5IHbhuqVuICogbikKLy8gTmjhuq1uIHjDqXQgMjogWMOpdCAyIHRydXkgduG6pW4gaSwgaiBzYW8gY2hvIHEoaSkgPCBxKGopCi8vIFThu6sgdHJ1eSB24bqlbiB0aOG7qSBpLCB0YSBjw7MgdGjhu4MgdGjDqm0gdsOgbyBt4buZdCBz4buRIGPhuqFuaCDEkeG7gyBjw7MgxJHGsOG7o2MgxJHDoXAgw6FuIGPhu6dhIHRydXkgduG6pW4gdGjhu6kgaiAKLy8gPT4gU29ydCBs4bqhaSBjw6FjIHRydXkgduG6pW4gdMSDbmcgZOG6p24gdGhlbyBxIHbDoCBkw7luZyBrxKkgdGh14bqtdCBIYWkgY29uIHRy4buPCi8vIE8oc+G7kSB0cnV5IHbhuqVuICsgbikKCnN0cnVjdCBFZGdlIHsKCWludCB1LCB2LCB3OyAKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IEVkZ2UmIG90aGVyKSBjb25zdCB7CgkJcmV0dXJuIHcgPCBvdGhlci53OyAKCX0gCn07IAoKc3RydWN0IFF1ZXJ5IHsKCWludCBxLCBpZHg7ICAKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IFF1ZXJ5JiBvdGhlcikgY29uc3QgewoJCXJldHVybiBxIDwgb3RoZXIucTsgCgl9Cn07IAoKaW50IG4sIG07IAp2ZWN0b3I8RWRnZT4gZWRnZXM7IAp2ZWN0b3I8UXVlcnk+IHF1ZXJpZXM7ICAKCmludCBwW05dLCBzeltOXTsgCgp2b2lkIGluaXRTZXQoKSB7Cglmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKCQlwW3VdID0gdTsgIAoJCXN6W3VdID0gMTsgCgl9Cn0KCmludCBmaW5kU2V0KGludCB1KSB7CglpZiAocFt1XSA9PSB1KSByZXR1cm4gdTsgCglyZXR1cm4gcFt1XSA9IGZpbmRTZXQocFt1XSk7IAp9CgpsbCB1bmlvblNldChpbnQgdSwgaW50IHYpIHsKCXUgPSBmaW5kU2V0KHUpOyAKCXYgPSBmaW5kU2V0KHYpOyAKCWlmICh1ID09IHYpIHJldHVybiAwOyAKCWlmIChzelt1XSA8IHN6W3ZdKSBzd2FwKHUsIHYpOyAgCglsbCBjbnQgPSAxbGwgKiBzelt1XSAqIHN6W3ZdOyAKCXBbdl0gPSB1OyAgCglzelt1XSArPSBzelt2XTsKCXJldHVybiBjbnQ7ICAKfQoKbGwgYW5zW01dOyAKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IG07IAoKCWZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewoJCWludCB1LCB2LCB3OyAKCQljaW4gPj4gdSA+PiB2ID4+IHc7IAoJCWVkZ2VzLnB1c2hfYmFjayh7dSwgdiwgd30pOyAKCX0KCglmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykgewoJCWludCBxOyBjaW4gPj4gcTsgIAoJCXF1ZXJpZXMucHVzaF9iYWNrKHtxLCBpfSk7Cgl9CgoJc29ydChlZGdlcy5iZWdpbigpLCBlZGdlcy5lbmQoKSk7ICAgCglzb3J0KHF1ZXJpZXMuYmVnaW4oKSwgcXVlcmllcy5lbmQoKSk7ICAKCglpbml0U2V0KCk7ICAKCglsbCBjdXJfYW5zID0gMDsgICAKCWZvciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IG07IGkrKykgewoJCWludCBxID0gcXVlcmllc1tpXS5xLCBpZHggPSBxdWVyaWVzW2ldLmlkeDsgICAJCQoJCXdoaWxlIChqIDwgbiAtIDEgJiYgZWRnZXNbal0udyA8PSBxKSB7CgkJCWN1cl9hbnMgKz0gdW5pb25TZXQoZWRnZXNbal0udSwgZWRnZXNbal0udik7CgkJCWorKzsgCgkJfQoJCWFuc1tpZHhdID0gY3VyX2FuczsgCgl9CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIGNvdXQgPDwgYW5zW2ldIDw8ICIgXG4iW2kgPT0gbSAtIDFdOyAKfQ==