#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = (a); i <= (b); i++)
#define per(i, a, b) for (int i = (a); i >= (b); i--)
using i64 = long long;
using Node = std::array<int, 5>;
constexpr int N = 5e5 + 5, V = 2e7 + 5;
int n, m, q, timer, dep[N], siz[N], son[N], dfn[N], rnk[N], L[N], R[N], ans[N], bit[N], ver, tag[N];
Node A[V];
std::vector<int> G[N];
inline void chmax(int &x, int y) { if (y > x) x = y; }
inline void modify(int pos, int val) {
for (int i = pos; i >= 1; i -= (i & -i)) {
if (tag[i] != ver) {
tag[i] = ver;
bit[i] = val;
}
else chmax(bit[i], val);
}
}
inline int query(int pos) {
int ret = 0;
for (int i = pos; i <= n; i += (i & -i))
if (tag[i] == ver) chmax(ret, bit[i]);
return ret;
}
void dfs1(int u, int f) {
dep[u] = dep[f] + 1, siz[u] = 1, rnk[dfn[u] = ++timer] = u;
for (auto v : G[u]) if (v != f) {
dfs1(v, u); siz[u] += siz[v];
if (siz[v] > siz[son[u]]) son[u] = v;
}
}
inline void add(int i, int val) {
int l = i, r = i;
if (L[i - 1]) l = L[i - 1];
if (R[i + 1]) r = R[i + 1];
L[l] = L[r] = l, R[l] = R[r] = r;
A[++m] = {l, r, r - l + 1, 0, val};
}
void dfs2(int u, int f, bool keep = 0) {
for (auto v : G[u]) if (v != f && v != son[u]) dfs2(v, u, 0);
if (son[u]) dfs2(son[u], u, 1);
add(u, dep[u]);
for (auto v : G[u]) if (v != f && v != son[u]) {
rep (i, dfn[v], dfn[v] + siz[v] - 1) add(rnk[i], dep[u]);
}
if (!keep) {
for (int i = dfn[u]; i <= dfn[u] + siz[u] - 1; i++) L[rnk[i]] = R[rnk[i]] = 0;
}
}
void CDQ(int l, int r) {
if (l == r) return;
int mid = (l + r) >> 1;
CDQ(l, mid); CDQ(mid + 1, r);
std::sort(A + l, A + mid + 1, [&](Node &lhs, Node &rhs) {
return lhs[1] > rhs[1];
});
std::sort(A + mid + 1, A + r + 1, [&](Node &lhs, Node &rhs) {
return lhs[1] > rhs[1];
});
int pl = l; ver++;
rep (i, mid + 1, r) {
if (A[i][3] == 0) continue;
while (pl <= mid && A[pl][1] >= A[i][1]) {
if (A[pl][3] == 0) modify(A[pl][2], A[pl][4]);
pl++;
}
int id = A[i][4];
chmax(ans[id], query(A[i][2]));
}
}
int main() {
freopen("query.in", "r", stdin);
freopen("query.out", "w", stdout);
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n;
rep (i, 1, n - 1) {
int u, v; std::cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
dfs1(1, 0); dfs2(1, 0);
std::cin >> q;
rep (i, 1, q) {
int l, r, k; std::cin >> l >> r >> k;
A[++m] = {r + 1 - k, k + l - 1, k, 1, i};
}
std::sort(A + 1, A + 1 + m, [&](Node &lhs, Node &rhs) {
return lhs[0] == rhs[0] ? lhs[3] < rhs[3] : lhs[0] < rhs[0];
});
CDQ(1, m);
rep (i, 1, q) std::cout << ans[i] << "\n";
return 0;
}