본문 바로가기

PS 짬통/골드

15681 트리와 쿼리

https://www.acmicpc.net/problem/15681

 

15681번: 트리와 쿼리

트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) 이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V)

www.acmicpc.net

 

트리의 부모배열 설정법과, 서브트리 크기를 DP로 알아내는 문제다

 

DFS와 유사하며, 로직 설명은 해당 문제링크 하단에 자세하게 설명되어 있다

 

쓸 필요 없지만 굳이 짧게 요약하자면

- parent 배열, size 배열을 쓴다

- size[x] : x 정점에서의 서브트리 속한 정점의 수

- 기본적으로 서브트리 정점의 수는 1이고, 해당 정점 하위에 정점들이 더 있다면, dfs를 통해서 자동적으로 바텀업 형식으로 해당 정점 서브트리의 크기에 더해지는 형식이다

- 이 문제에는 굳이 parent 배열을 쓸필요가 없긴 하다, 그러나 학습을 위해서 썼다

- 굳이 DFS를 두번 돌려서 문제를 풀 필요 없다. size랑 parent는 한번의 dfs로 다 구할 수 있다

 

문제에서 의도하는 정석 코드

https://github.com/KimximyaFan/Random-Defense/blob/main/C0038.java

 

최적화 된 코드

https://github.com/KimximyaFan/Random-Defense/blob/main/C0039.java

'PS 짬통 > 골드' 카테고리의 다른 글

2213 트리의 독립집합  (1) 2023.10.19
2533 사회망 서비스(SNS)  (0) 2023.10.16
11780 플로이드 2  (0) 2023.10.11
11779 최소비용 구하기 2  (1) 2023.10.10
9019 DSLR  (1) 2023.10.08