#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cmath>

const int maxn = 200000;
typedef int sz[maxn];
int n, m, num, i, st[maxn], l, r; sz e, next, first, prev, rd, u, us; double k[maxn], b[maxn], bs[maxn]; char ch;

void link(int x, int y) {e[++num] = y, next[num] = first[x], first[x] = num;}

void change(int x, int z) 
{
    u[x] += z, us[prev[x]] += z;
    for (; prev[x]; x = prev[x])
    {
    bs[prev[x]] -= b[x];
    b[x] = k[x] * (u[x] + bs[x] - us[x]);
    bs[prev[x]] += b[x];
    }
}

double ask(int x)
{
    for (st[0] = 0; x; st[++st[0]] = x, x = prev[x]);
    int y = e[next[first[st[st[0]]]]];
    double ans = (b[y] - u[y])/ (2 - k[y]);
    for (x = st[0] - 1; x; --x)
    ans = k[st[x]] * ans + b[st[x]];
    return ans;
}

int main()
{
  freopen("circuit.in""r", stdin);
  freopen("circuit.out""w", stdout);
  scanf("%d%d", &n, &m);
  for (i = 1; i < n; ++i)
  {
      int x, y;
      scanf("%d%d\n", &x, &y);
      link(x, y), link(y, x);
      ++rd[x], ++rd[y];
  }
  for (i = 1; i <= n; ++i)
      if (rd[i] == 1break;
  prev[0] = -1;
  link(i, 0), link(0, i);
  for (st[l = r = 1] = 0; l <= r; ++l)
      for (int p = first[st[l]]; p; p = next[p])
      if (e[p] != prev[st[l]])
          prev[st[++r] = e[p]] = st[l];
  for (i = r; i > 2; --i)
      if (rd[st[i]] == 1) k[st[i]] = 0.5else 
      {
      double m1 = rd[st[i]];
      for (int p = first[st[i]]; p; p = next[p])
          if (e[p] != prev[st[i]]) m1 -= k[e[p]];
      k[st[i]] = 1/m1;
      }
  int x, y, z;
  for (i = 1; i <= m; ++i)
  {
      scanf("%c", &ch);
      if (ch == 'Q')
      {
      scanf("%d\n", &x);
      printf("%.10lf\n", ask(x));
      } else 
      {
      scanf("%d%d%d\n", &x, &y, &z);
      if (prev[x] == y) y = x, z = -z;
      change(y, z);
      }
  }
  return 0;
}