#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;
}
