#include <bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
const int N = 1e5 + 5;
int n;
long long c[N][4];
struct node {
  int v, w, next;
} e[N << 1];
int head[N], tot = 0;
void init(int n) {
  tot = 0;
  for (int i = 0; i <= n; i++) head[i] = -1;
}
void add(int u, int v, int w) {
  e[tot].v = v;
  e[tot].w = w;
  e[tot].next = head[u];
  head[u] = tot++;
  e[tot].v = u;
  e[tot].w = w;
  e[tot].next = head[v];
  head[v] = tot++;
}
long long C(int n, int m) {
  if (c[n][m]) return c[n][m];
  long long up = 1, down = 1;
  for (int i = 0; i < m; i++) {
    up *= (n - i);
    down *= (i + 1);
  }
  return c[n][m] = up / down;
}
int num[N];
double ans = 0;
long long p[N];
void dfs(int u, int fa) {
  num[u] = 1;
  for (int i = head[u]; ~i; i = e[i].next) {
    if (e[i].v == fa) continue;
    dfs(e[i].v, u);
    int id;
    if (i & 1)
      id = (i + 1) >> 1;
    else
      id = (i >> 1) + 1;
    p[id] = C(num[e[i].v], 1) * C(n - num[e[i].v], 2) +
            C(num[e[i].v], 2) * C(n - num[e[i].v], 1);
    ans += 1.0 * p[id] * e[i].w;
    num[u] += num[e[i].v];
  }
}
int main() {
  ios::sync_with_stdio(false);
  cout.tie(NULL);
  scanf("%d", &n);
  init(n);
  ans = 0;
  for (int i = 1; i < n; i++) {
    int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    add(u, v, w);
  }
  dfs(1, 0);
  int q;
  scanf("%d", &q);
  double K = 2.0 / C(n, 3);
  while (q--) {
    int id, w;
    scanf("%d%d", &id, &w);
    int index = (id - 1) << 1;
    ans -= p[id] * (e[index].w - w);
    e[index].w = w;
    printf("%.10f\n", K * ans);
  }
  return 0;
}
