func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 300050;   const int L = 19;   const long long inf = 1e15;   vector<int> E[N];   int par[N][L], dep[N];   void DFS(int u, int p) {     dep[u] = dep[p] + 1;     par[u][0] = p;     for (int i = 1; i < L; i++) par[u][i] = par[par[u][i - 1]][i - 1];     for (int v : E[u])       if (v != p) DFS(v, u);   }   int LCA(int u, int v) {     if (dep[u] < dep[v]) return LCA(v, u);     for (int i = L - 1; ~i; i--)       if (dep[par[u][i]] >= dep[v]) u = par[u][i];     for (int i = L - 1; ~i; i--)       if (par[u][i] != par[v][i]) u = par[u][i], v = par[v][i];     return u == v ? v : par[v][0];   }   vector<pair<int, int> > up[N];   bool ok[N];   long long dp[N];   int hi[N];   set<pair<long long, int> > st[N];   pair<long long, int> operator+(pair<long long, int> a, long long b) {     a.first += b;     return a;   }   long long st_add[N], ans;   void Solve(int u, int p) {     int nok = 0;     long long sum = 0;     hi[u] = dep[u];     for (int v : E[u])       if (v != p)         Solve(v, u), nok += !ok[v], sum += ok[v] ? dp[v] : 0,             hi[u] = min(hi[u], hi[v]);     if (nok) {       ok[u] = 0;     } else {       for (int v : E[u])         if (v != p) {           if (st[u].size() < st[v].size())             st[u].swap(st[v]), swap(st_add[u], st_add[v]);           for (auto p : st[v]) st[u].insert(p + (st_add[v] - st_add[u]));         }       dp[u] = sum;       for (auto p : up[u])         st[u].insert(make_pair(p.second, dep[p.first]) + (-st_add[u]));       if (hi[u] == dep[u]) {         while (st[u].size() && st[u].begin()->second >= dep[u])           st[u].erase(st[u].begin());         if (st[u].empty())           ok[u] = 0;         else {           ok[u] = 1;           dp[u] += st[u].begin()->first + st_add[u];           hi[u] = st[u].begin()->second;           st_add[u] -= st[u].begin()->first + st_add[u];           st[u].erase(st[u].begin());         }       } else         ok[u] = 1;     }     if (u == 1) ans = nok == 0 ? sum : -1;   }   int main() {     int n, m, i, u, v, c;     scanf( %i %i , &n, &m);     for (i = 1; i < n; i++)       scanf( %i %i , &u, &v), E[u].push_back(v), E[v].push_back(u);     DFS(1, 0);     for (i = 1; i <= m; i++)       scanf( %i %i %i , &u, &v, &c), up[u].push_back(make_pair(LCA(u, v), c));     Solve(1, 0);     printf( %lld n , ans);     return 0;   }   