47분
graph = new ArrayList[N + 1];
for (int i = 0; i < N - 1; i++) {
int U = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());
graph[U].add(V);
graph[V].add(U);
}
Stack<Integer> stack = new Stack<>();
stack.push(root);
parent[root] = -1;
while (!stack.isEmpty()) {
int u = stack.pop();
order[idx++] = u;
for (int v : graph[u]) {
if (v == parent[u]) continue; // 부모 노드는 건너뛰기
parent[v] = u;
stack.push(v);
}
}
for (int i = idx - 1; i >= 0; i--) {
int u = order[i];
int size = 1;
for (int v : graph[u]) {
if (v == parent[u]) continue;
if (parent[v] == u) size += sub[v]; // 자식 서브트리 크기 더하기
}
sub[u] = size;
}
for (int i = 0; i < Q; i++) {
int v = Integer.parseInt(br.readLine());
sb.append(sub[v]).append("\n");
}