Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- HashMap
- Java
- 유저 쓰레드
- 자바
- 트리
- os 쓰레드
- list
- 배열
- 코테
- 하드웨어 쓰레드
- linkedmap
- Lock
- OS
- Red-Black
- MAP
- black-red
- 알고리즘
- tree
- 쓰레드
- avl
- 스케줄링
- 유저모드
- set
- 커널모드
- 프로그래머스
- cpu
- non-blocking
- synchronizeation
- 쓰레드 덤프
- 코딩테스트
Archives
변수의 기록
(코딩테스트) 백준_15681_트리와 쿼리 BFS , DP 본문
답.
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];
}
}