#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 10;
int n, m;
long long tree[maxn], ans[maxn];
vector<int> G[maxn], D[maxn], X[maxn];
void add(int x, int val) {
  while (x <= n) {
    tree[x] += val;
    x = x + (x & -x);
  }
}
long long sum(int x) {
  long long ans = 0;
  while (x) {
    ans += tree[x];
    x = x - (x & -x);
  }
  return ans;
}
void dfs(int x, int fa, int dep) {
  for (int i = 0; i < D[x].size(); i++) {
    add(min(D[x][i] + dep, n), X[x][i]);
  }
  ans[x] = sum(n) - sum(dep - 1);
  for (int i = 0; i < G[x].size(); i++) {
    if (G[x][i] == fa) continue;
    dfs(G[x][i], x, dep + 1);
  }
  for (int i = 0; i < D[x].size(); i++) {
    add(min(D[x][i] + dep, n), -X[x][i]);
  }
}
int main() {
  int x, y, z;
  scanf("%d", &n);
  for (int i = 1; i <= n - 1; i++) {
    scanf("%d%d", &x, &y);
    G[x].push_back(y);
    G[y].push_back(x);
  }
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    scanf("%d%d%d", &x, &y, &z);
    D[x].push_back(y);
    X[x].push_back(z);
  }
  dfs(1, 0, 1);
  for (int i = 1; i <= n; i++) {
    printf("%lld ", ans[i]);
  }
  return 0;
}
