func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 9;   const int L = 20;   int par[N][L];   int up[N][L];   int h[N];   int to[N];   int s[N], t[N];   pair<int, int> edge[N];   vector<pair<int, int> > al[N];   int find(int v) {     if (to[v] == v) return v;     return to[v] = find(to[v]);   }   int unite(int u, int v) {     u = find(u), v = find(v);     to[u] = v;     return (u != v);   }   void dfs(int v, int p = -1) {     h[v] = (p + 1 ? h[p] + 1 : 0);     par[v][0] = p;     for (int i = 1; i < L; i++) {       if (par[v][i - 1] + 1) {         par[v][i] = par[par[v][i - 1]][i - 1];         up[v][i] = max(up[v][i - 1], up[par[v][i - 1]][i - 1]);       }     }     for (int i = 0; i < al[v].size(); i++) {       int u = al[v][i].first;       if (u == p) continue;       up[u][0] = al[v][i].second;       dfs(u, v);     }     return;   }   pair<int, int> go_up(int v, int x) {     int mx = 0;     for (int b = 0; b < L; b++)       if (x >> b & 1) mx = max(mx, up[v][b]), v = par[v][b];     return {v, mx};   }   int lca(int u, int v) {     if (h[u] < h[v]) swap(u, v);     u = go_up(u, h[u] - h[v]).first;     if (u == v) return v;     for (int b = L - 1; ~b; --b)       if (par[v][b] != par[u][b]) v = par[v][b], u = par[u][b];     return par[v][0];   }   int main() {     ios_base::sync_with_stdio(0);     int n, m;     cin >> n >> m;     for (int i = 0; i < n; i++) to[i] = i;     for (int i = 0; i < m; i++) {       int u, v, w;       cin >> u >> v >> w;       --u, --v;       s[i] = u, t[i] = v;       edge[i] = {w, i};     }     sort(edge, edge + m);     long long ans = 0;     int p = 0;     for (int i = 0; i < m; i++) {       long long w = edge[i].first, id = edge[i].second;       int u = s[id], v = t[id];       if (unite(u, v)) {         ans += w, p++;         al[u].push_back({v, w});         al[v].push_back({u, w});       }     }     dfs(0);     int q;     cin >> q;     while (q--) {       int u, v;       cin >> u >> v;       --u, --v;       int pu = find(u), pv = find(v);       if ((p == n - 2 && pu == pv) || p < n - 2) {         cout << -1 <<   n ;         continue;       }       if (p == n - 2) {         cout << ans <<   n ;         continue;       }       int lc = lca(u, v);       cout << ans - max(go_up(u, h[u] - h[lc]).second,                         go_up(v, h[v] - h[lc]).second)            <<   n ;     }     return 0;   }   