For Programmer

백준 15681번 파이썬 문제풀이(트리와 쿼리) 본문

코팅테스트/백준 문제 모음

백준 15681번 파이썬 문제풀이(트리와 쿼리)

유지광이 2022. 3. 23. 21:42
728x90


간단한 트리문제이다. 0으로 이루어진 리스트를 하나 선언 후 dfs를 돌면서 하위 재귀에서 탐색한 개수를 계속 더해주면서 리턴 해주면 된다. 

 

import sys

sys.setrecursionlimit(150000)
input = sys.stdin.readline


# dfs로 자식노드의 개수 구하기
def dfs(cur):
    child_count[cur] = 1
    visited[cur] = True

    for nxt in graph[cur]:
        if not visited[nxt]:
            child_count[cur] += dfs(nxt) #하위재귀에서 탐색한 개수를 계속 더해주면서 그 값을 리턴

    return child_count[cur]


N, R, Q = map(int, input().split())  # 정점의 수 , 루트 번호 , 쿼리의 수
graph = [[] for _ in range(N + 1)]
for _ in range(N - 1):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

visited = [False] * (N + 1)  # 방문처리
child_count = [0] * (N + 1)  # 한 노드 v 부터 자식노드의 개수를 저장할 리스트
dfs(R)  # dfs를 정점 R부터 돈다.

for _ in range(Q):
    q = int(input().rstrip())
    print(child_count[q])

 

728x90
Comments