#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000;
const int MAXV = 100;
double prob[MAXN + 5][MAXV + 5];
int sz[MAXN + 5];
double temp[MAXV + 5];
int n;
double ncr(int r, int n) {
  if (r > n) return 0;
  double ret = 1;
  for (int c = 0; c < r; c++) ret *= n - c;
  for (int c = 0; c < r; c++) ret /= c + 1;
  return ret;
}
double probabilityToTaketakeFromVuntasted(int take, int k, int untasted,
                                          int from) {
  int tasted = sz[from] - untasted;
  return ncr(take, untasted) * ncr(k - take, tasted) / ncr(k, sz[from]);
}
int main() {
  int c, c2;
  memset(prob, 0, sizeof(prob));
  double ret = 0;
  scanf("%d", &n);
  for (c = 0; c < n; c++) {
    scanf("%d", &sz[c]);
    prob[c][sz[c]] = 1.0;
  }
  for (c = 0; c < n; c++) ret += prob[c][0];
  int qs;
  for (scanf("%d", &qs); qs; qs--) {
    int from, to, k;
    scanf("%d%d%d", &from, &to, &k);
    from--;
    to--;
    memset(temp, 0, sizeof(temp));
    double denominator = ncr(k, sz[from]);
    for (int untasted = 0; untasted <= MAXV; untasted++) {
      int newk = min(k, untasted);
      int tasted = sz[from] - untasted;
      double n1 = 1, n2 = 1;
      double d1 = 1, d2 = 1;
      for (int i = 0; i < min(tasted, k); i++) {
        d2 *= i + 1;
        n2 *= tasted - i;
      }
      for (int take = 0; take <= k; take++) {
        if (take > 0) {
          d1 *= take;
          if (take <= untasted)
            n1 *= untasted - take + 1;
          else
            n1 = 0;
        }
        if (k - take > tasted) continue;
        temp[untasted - take] +=
            prob[from][untasted] * (n1 / d1) * (n2 / d2) / denominator;
        if (k - take > 0) {
          d2 /= k - take;
          n2 /= tasted - (k - take) + 1;
        }
      }
    }
    ret += temp[0] - prob[from][0];
    for (int i = 0; i <= MAXV; i++) prob[from][i] = temp[i];
    sz[from] -= k;
    sz[to] += k;
    printf("%.10lf\n", ret);
  }
  return 0;
}
