#include #include #include #include using namespace std; typedef long long LL; const int N = 100010, M = 2 * N; LL a[N]; vector vec; int n, q, h[N], e[M], ne[M], idx; void Add(int x, int y) { e[idx] = y, ne[idx] = h[x], h[x] = idx++; } void Solve(int u, int p, int step) { vec.push_back(u); if (step == 2) return; for (int i = h[u]; i != -1; i = ne[i]) { int v = e[i]; if (v == p) continue; Solve(v, u, step + 1); } } int main() { // freopen("three.in", "r", stdin); // freopen("three.out", "w", stdout); scanf("%d", &n); memset(h, -1, sizeof(h)); for (int i = 1, u, v; i <= n - 1; ++i) { scanf("%d%d", &u, &v); ++u, ++v; Add(u, v), Add(v, u); } for (int i = 1; i <= n; ++i) scanf("%lld", &a[i]); scanf("%d", &q); while (q--) { int x; scanf("%d", &x); ++x; vec.clear(); Solve(x, 0, 0); for (auto i : vec) { if (i == x) continue; a[x] += a[i]; } printf("%lld\n", a[x]); for (auto i : vec) { if (i == x) continue; a[i] = 0; } } return 0; }