func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 300000;   int parent[N], size[N];   vector<pair<int, pair<int, int>>> v;   pair<int, int> q[N];   long long ans[N];   int Find(int a) {     if (parent[a] == a) return a;     return parent[a] = Find(parent[a]);   }   void Union(int a, int b) { parent[Find(b)] = Find(a); }   long long doit(int a, int b) {     int x = Find(a);     int y = Find(b);     long long p = size[x];     long long qq = size[y];     long long anss = p * qq;     size[x] += size[y];     Union(x, y);     return anss;   }   int main(int argc, char const *argv[]) {     for (int i = 0; i < N; i++) parent[i] = i, size[i] = 1;     int n, m, a, b, c;     scanf( %d%d , &n, &m);     for (int i = 0; i < n - 1; ++i) {       scanf( %d%d%d , &a, &b, &c);       v.push_back({c, {a, b}});     }     sort(v.begin(), v.end());     for (int i = 0; i < m; i++) {       scanf( %d , &a);       q[i] = {a, i};     }     sort(q, q + m);     int at = 0;     long long sum = 0;     for (int i = 0; i < m; i++) {       if (at < v.size()) {         while (v[at].first <= q[i].first) {           if (at >= v.size()) break;           long long kk = doit(v[at].second.first, v[at].second.second);           sum += kk;           at++;           if (at >= v.size()) break;         }       }       ans[q[i].second] = sum;     }     for (int i = 0; i < m; i++) {       printf( %lld  , ans[i]);     }     return 0;   }   