func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast )   using namespace std;   vector<vector<pair<int, int>>> g;   vector<pair<int, pair<int, int>>> edg;   int cp[100010];   int find(int x) { return cp[x] = cp[x] == x ? x : find(cp[x]); }   void union_(int x, int y) { cp[find(x)] = find(y); }   int h[100010];   int anc[100010][18];   int val[100010][18];   void dfs_preprocess(int u, int p = -1) {     anc[u][0] = p;     if (~p) {       h[u] = h[p] + 1;     }     for (int i = 1; i < 18; ++i) {       if (~anc[u][i - 1]) {         anc[u][i] = anc[anc[u][i - 1]][i - 1];         val[u][i] = max(val[anc[u][i - 1]][i - 1], val[u][i - 1]);       }     }     for (auto v : g[u]) {       if (v.second != p) {         val[v.second][0] = v.first;         dfs_preprocess(v.second, u);       }     }   }   int LCA(int v, int u) {     if (h[v] < h[u]) swap(u, v);     int val_ans = 0;     for (int i = 18 - 1; i >= 0; --i) {       if (anc[v][i] + 1 && h[anc[v][i]] >= h[u]) {         val_ans = max(val_ans, val[v][i]);         v = anc[v][i];       }     }     if (v == u) return val_ans;     for (int i = 18 - 1; i >= 0; --i) {       if (anc[v][i] != anc[u][i]) {         val_ans = max({val_ans, val[v][i], val[u][i]});         v = anc[v][i];         u = anc[u][i];       }     }     val_ans = max({val_ans, val[v][0], val[u][0]});     return val_ans;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int n, m;     cin >> n >> m;     for (int i = 0; i < n; ++i) cp[i] = i;     g.assign(n, vector<pair<int, int>>());     map<pair<int, int>, int> mp;     int id = 0;     for (int i = 0; i < m; ++i) {       int u, v, w;       cin >> u >> v >> w;       u--, v--;       mp[{u, v}] = id++;       edg.push_back({w, {u, v}});     }     sort((edg).begin(), (edg).end());     vector<int> mst(m, 0);     memset(anc, -1, sizeof(anc));     for (int i = 0; i < m; ++i) {       int u = edg[i].second.first, v = edg[i].second.second, w = edg[i].first;       if (find(u) != find(v)) {         union_(u, v);         g[u].push_back({w, v});         g[v].push_back({w, u});         mst[i] = 1;       }     }     dfs_preprocess(0);     vector<int> ans(m, -1);     for (int i = 0; i < m; ++i) {       if (!mst[i]) {         ans[mp[edg[i].second]] = LCA(edg[i].second.first, edg[i].second.second);       }     }     for (int u : ans) {       if (u + 1) cout << u <<   n ;     }   }   