func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100010;   int n, m, pnt[N], vis[N];   long long vsum[N], esum[N], vcnt[N];   pair<pair<int, int>, pair<int, int> > edge[N];   vector<int> edge2[N];   int find(int x) {     if (x != pnt[x]) pnt[x] = find(pnt[x]);     return pnt[x];   }   void dfs(int u, int root) {     vis[u] = root;     vsum[u] = vcnt[u];     for (int i = 0; i < (int)(edge2[u]).size(); ++i) {       int v = edge2[u][i];       if (vis[v]) continue;       dfs(v, root);       vsum[u] += vsum[v];     }   }   void solve() {     int u, v, w;     m = n - 1;     memset(esum, 0, sizeof(esum));     for (int i = 0; i < n; ++i) {       vcnt[i] = 1;       pnt[i] = i;     }     for (int i = 0; i < m; ++i) {       scanf( %d%d%d , &u, &v, &w);       edge[i] = make_pair(make_pair(w, i), make_pair(u - 1, v - 1));     }     sort(edge, edge + m);     for (int i = 0; i < m; ++i) {       int j = i + 1;       for (; j < m; ++j)         if (edge[i].first.first != edge[j].first.first) break;       set<int> s;       for (int k = i; k < j; ++k) {         s.insert(find(edge[k].second.first));         s.insert(find(edge[k].second.second));       }       vector<int> vt((s).begin(), (s).end());       for (int k = 0; k < (int)(vt).size(); ++k) {         vsum[vt[k]] = vis[vt[k]] = 0;         edge2[vt[k]] = vector<int>();       }       for (int k = i; k < j; ++k) {         int p = find(edge[k].second.first);         int q = find(edge[k].second.second);         edge2[p].push_back(q);         edge2[q].push_back(p);       }       for (int k = 0; k < (int)(vt).size(); ++k) {         if (vis[vt[k]]) continue;         dfs(vt[k], vt[k] + 1);       }       for (int k = i; k < j; ++k) {         int p = find(edge[k].second.first);         int q = find(edge[k].second.second);         long long c = min(vsum[p], vsum[q]);         esum[edge[k].first.second] = 2 * c * (vsum[vis[p] - 1] - c);       }       for (int k = i; k < j; ++k) {         int p = find(edge[k].second.first);         int q = find(edge[k].second.second);         pnt[p] = q;         vcnt[q] += vcnt[p];       }       i = j - 1;     }     long long ans = 0;     int ct = 0;     for (int i = 0; i < m; ++i) {       if (ans < esum[i]) {         ans = esum[i];         ct = 1;       } else if (ans == esum[i]) {         ct++;       }     }     printf(          %I64d            %d n ,         ans, ct);     bool first = true;     for (int i = 0; i < m; ++i) {       if (esum[i] != ans) continue;       if (!first)         printf(   );       else         first = false;       printf( %d , i + 1);     }     puts(  );   }   int main() {     while (scanf( %d , &n) != EOF) {       solve();     }     return 0;   }   