#include using namespace std; using i64 = long long; #define rep(i,s,e) for(i64 (i) = (s);(i) < (e);(i)++) #define all(x) x.begin(),x.end() #define let auto const template struct dynarr: std::vector { using std::vector::vector; using size_type = typename std::vector::size_type; auto&& operator[](size_type i) { return this->at(i); } auto&& operator[](size_type i) const { return this->at(i); } }; int main() { i64 N; cin >> N; vector> G(N); for(int i = 0;i < N - 1;i++) { i64 a, b; cin >> a >> b; G[a].push_back(b); G[b].push_back(a); } vector A(N); for(int i = 0;i < N;i++) { cin >> A[i]; } i64 Q; cin >> Q; for(int i = 0;i < Q;i++) { i64 x; cin >> x; queue, i64>> que; que.push({{x, -1}, 0}); while(!que.empty()) { i64 v = que.front().first.first; i64 f = que.front().first.second; i64 d = que.front().second; que.pop(); if(d == 2) continue; for(int t: G[v]) { if(t == f) continue; A[x] += A[t]; A[t] = 0; que.push({{t, v}, d + 1}); } } cout << A[x] << endl; } }