func_code_string: #include <bits/stdc++.h>   using namespace std;   const double Pi = acos(-1.0);   void DEBUG(string name, int* begin, int* end) {     printf( DEBUG: %s = { , name.c_str());     for (; begin != end; begin++) {       printf( %5d, , *begin);     }     printf( %c} n , (char)8);   }   void DEBUG(string name, long long* begin, long long* end) {     printf( DEBUG: %s = { , name.c_str());     for (; begin != end; begin++) {       printf( %5lld, , *begin);     }     printf( %c} n , (char)8);   }   void DEBUG(string name, double* begin, double* end) {     printf( DEBUG: %s = { , name.c_str());     for (; begin != end; begin++) {       printf( %5lf, , *begin);     }     printf( %c} n , (char)8);   }   void DEBUG(string name, vector<int> nums) {     printf( DEBUG: %s = { , name.c_str());     for (int i : nums) {       printf( %5d, , i);     }     printf( %c} n , (char)8);   }   void DEBUG(string name, set<int> nums) {     printf( DEBUG: %s = { , name.c_str());     for (int i : nums) {       printf( %5d, , i);     }     printf( %c} n , (char)8);   }   void DEBUG(string name, vector<long long> nums) {     printf( DEBUG: %s = { , name.c_str());     for (int i : nums) {       printf( %5lld, , i);     }     printf( %c} n , (char)8);   }   void DEBUG(string name, set<long long> nums) {     printf( DEBUG: %s = { , name.c_str());     for (int i : nums) {       printf( %5lld, , i);     }     printf( %c} n , (char)8);   }   void DEBUG(string name, map<int, int> nums) {     printf( DEBUG: %s = { , name.c_str());     for (auto i : nums) {       printf( (%d -> %d), , i.first, i.second);     }     printf( %c} n , (char)8);   }   void DEBUG(string name, queue<int> nums) {     if (nums.size() == 0) {       printf( DEBUG: %s = [] n , name.c_str());       return;     }     printf( DEBUG: %s = [ , name.c_str());     while (!nums.empty()) {       printf( %5d, , nums.front());       nums.pop();     }     printf( %c] n , (char)8);   }   void DEBUG(string name, int num) {     printf( DEBUG: %s = %d n , name.c_str(), num);   }   void DEBUG(string name, long long num) {     printf( DEBUG: %s = %lld n , name.c_str(), num);   }   void DEBUG(string name, double num) {     printf( DEBUG: %s = %lf n , name.c_str(), num);   }   int cross(int a1, int b1, int a2, int b2) { return (a1 * b2 - a2 * b1); }   int ccw(pair<int, int> a, pair<int, int> b, pair<int, int> c) {     return cross(b.first - a.first, b.second - a.second, c.first - a.first,                  c.second - a.second);   }   void hi() { printf( hi n ); }   long long n;   long long times[100010];   long long t[100010], k[100010];   vector<pair<int, int> > adj[100010];   bool visited[100010];   void dfs(int node) {     k[node] = 1;     for (pair<int, int> i : adj[node]) {       if (!visited[i.first]) {         visited[i.first] = true;         dfs(i.first);         k[node] += k[i.first];         t[node] += t[i.first] + 2 * i.second;       }     }   }   bool comp(pair<int, int> a, pair<int, int> b) {     return (t[a.first] + 2 * a.second) * (k[b.first]) <            (t[b.first] + 2 * b.second) * (k[a.first]);   }   long long curr_time;   void dfs2(int node) {     times[node] = curr_time;     for (pair<int, int> i : adj[node]) {       if (!visited[i.first]) {         visited[i.first] = true;         curr_time += i.second;         dfs2(i.first);         curr_time += i.second;       }     }   }   int main() {     cin >> n;     for (int i = 0; i < n - 1; i++) {       int a, b, c;       cin >> a >> b >> c;       a--;       b--;       adj[a].push_back(pair<int, int>(b, c));       adj[b].push_back(pair<int, int>(a, c));     }     visited[0] = true;     dfs(0);     for (int i = 0; i < n; i++) {       sort(adj[i].begin(), adj[i].end(), comp);     }     memset(visited, 0, sizeof(visited));     visited[0] = true;     dfs2(0);     double sum = 0;     for (int i = 0; i < n; i++) {       sum += times[i];     }     printf( %.41lf , sum / (n - 1));     return 0;   }   