카테고리 없음
(코딩테스트) 백준_15681_트리와 쿼리 BFS , DP
불광동 물주먹
2025. 5. 5. 01:55


답.
package codingTest;
import java.io.*;
import java.util.*;
public class Backjon_15681 {
static List<Integer>[] tree;
static int[] size;
static boolean[] visited;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 정점 수
int R = Integer.parseInt(st.nextToken()); // 루트
int Q = Integer.parseInt(st.nextToken()); // 쿼리 수
tree = new ArrayList[N + 1];
size = new int[N + 1];
visited = new boolean[N + 1];
for (int i = 1; i <= N; i++) {
tree[i] = new ArrayList<>();
}
// 간선 입력
for (int i = 0; i < N - 1; i++) {
st = new StringTokenizer(br.readLine());
int U = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());
tree[U].add(V);
tree[V].add(U);
}
dfs(R); // 루트 기준 서브트리 크기 계산
StringBuilder sb = new StringBuilder();
// 쿼리 입력 안전하게 처리
for (int i = 0; i < Q; ) {
String line = br.readLine();
if (line == null || line.isBlank()) continue;
int query = Integer.parseInt(line.trim());
sb.append(size[query]).append("\n");
i++;
}
System.out.print(sb);
}
public static int dfs(int node) {
visited[node] = true;
size[node] = 1;
for (int child : tree[node]) {
if (!visited[child]) {
size[node] += dfs(child);
}
}
return size[node];
}
}