bong-u/til

백준 - 15681 : 트리와 쿼리 (G5)

수정일 : 2024-11-15

 1import sys
 2sys.setrecursionlimit(10**6)
 3input = sys.stdin.readline
 4N, R, Q = map(int, input().split())
 5G = [[] for _ in range(N)]
 6cnt = [1]*N
 7visited = [False]*N
 8
 9for _ in range(N-1):
10    a, b = map(int, input().split())
11    G[a-1].append(b-1)
12    G[b-1].append(a-1)
13
14def dfs(node):
15    visited[node] = True
16
17    for i in G[node]:
18        if not visited[i]:
19            cnt[node] += dfs(i)
20    return cnt[node]
21
22dfs(R-1)
23
24for _ in range(Q):
25    print (cnt[int(input())-1])
  • 혼자 풀었다!
  • 서브트리에 속한 정점의 수를 memoization해놓고 쿼리마다 index의 값을 출력하면 된다
  • sys.stdin.readline 안써서 시간 초과 한 번
  • recursionlimit 안 늘려서 런타임 에러 한 번
  • python3 안 쓰고 pypy3 써서 메모리 초과 한 번
  • 총 3번 틀렸다