루트가 있는 트리에서 각 노드 이하로 몇 개의 노드가 있는지 카운트해야한다.
처음 문제를 봤을때 쉽게 생각했는데 시간초과/메모리초과 문제로 꽤나 오래 걸렸다.
dfs를(재귀를) 이렇게 활용할 수 있구나 깨달아서 좋은 문제
import sys
sys.setrecursionlimit(10**5)
N, R, Q = map(int, sys.stdin.readline().split())
graph = [[] for _ in range(N+1)]
dp = [0 for _ in range(N+1)]
for _ in range(N-1):
a, b = map(int, sys.stdin.readline().split())
graph[a].append(b)
graph[b].append(a)
def dfs(x):
dp[x]=1
for next in graph[x]:
if not dp[next]:
dfs(next)
dp[x] += dp[next]
dfs(R)
for _ in range(Q):
print(dp[int(sys.stdin.readline())])
[**] 이때 sys.setrecursionlimit 제대로 걸어야 한다. .. 안그러면 메모리초과,,,
'알고리즘' 카테고리의 다른 글
[그래프] 백준 1261 알고스팟 (0) | 2022.03.16 |
---|---|
[그래프] 백준 1197 최소 스패닝 트리(kruskal/prim) (0) | 2022.03.14 |
[그래프] 백준 2206 벽 부수고 이동하기 (0) | 2022.03.13 |
[dp] 백준 12865 평범한 배낭/ 14728 벼락치기 (0) | 2022.03.13 |
[dp] 17069번 백준 파이프 옮기기2 (0) | 2022.03.10 |
댓글