#include <bits/stdc++.h>
using namespace std;
long long n;
vector<pair<long long, long long> > v[100003];
long long num[100003];
long long s[100003];
struct node {
  long long s;
  long long n;
  long long nod;
  long long edge;
  node() {}
  node(long long s1, long long n1, long long nod1, long long e1) {
    s = s1;
    n = n1;
    nod = nod1;
    edge = e1;
  }
};
bool operator<(node n1, node n2) {
  return n1.s * n2.n < n2.s * n1.n ||
         (n1.s * n2.n == n2.s * n1.n) && (n1.nod < n2.nod);
}
long long numNodes(long long no, long long p) {
  for (int i = 0; i < v[no].size(); i++)
    if (v[no][i].first != p) num[no] += numNodes(v[no][i].first, no);
  num[no]++;
  return num[no];
}
long long sumEdges(long long no, long long p) {
  for (int i = 0; i < v[no].size(); i++)
    if (v[no][i].first != p)
      s[no] += v[no][i].second + sumEdges(v[no][i].first, no);
  return s[no];
}
long long f(long long start, long long no, long long p) {
  vector<node> vn;
  for (int i = 0; i < v[no].size(); i++)
    if (v[no][i].first != p) {
      vn.push_back(node(v[no][i].second + s[v[no][i].first],
                        num[v[no][i].first], v[no][i].first, v[no][i].second));
    }
  sort(vn.begin(), vn.end());
  long long ret = 0;
  long long sumedges = 0;
  for (int i = 0; i < vn.size(); i++) {
    ret += start + 2 * sumedges + vn[i].edge +
           f(start + 2 * sumedges + vn[i].edge, vn[i].nod, no);
    sumedges += vn[i].s;
  }
  return ret;
}
int main() {
  cout << setprecision(15);
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a, b, t;
    cin >> a >> b >> t;
    v[a].push_back(make_pair(b, t));
    v[b].push_back(make_pair(a, t));
  }
  numNodes(1, -1);
  sumEdges(1, -1);
  long long ret = f(0, 1, -1);
  cout << ret * 1.0 / (n - 1) << endl;
  return 0;
}
