[BOJ] Q15681 트리와 쿼리 성공

Question

Language: Python

Difficulty: Gold 3~4

q2533와 같은 방식으로 접근해서 풀이할 수 있다.

대신, 점화식은 아래와 같이 활용하면된다. 매번의 dfs를 수행하고 나면 해당 노드의 정점 개수를 반환하도록 한다, 리프 노드의 값은 항상 1이다.

size[vertex]+=dfs(child)

Solution

import sys
def dfs(vertex):
    global size,visited
    visited[vertex]=True

    for child in graph[vertex]:
        if visited[child]:
            continue
        size[vertex]+=dfs(child)
    
    return size[vertex]

if __name__ == "__main__":
    sys.setrecursionlimit(10**5)
    n_vertex,root,n_queries=map(int,input().split())
    graph=[[] for _ in range(n_vertex+1)]
    visited=[False]*(n_vertex+1)
    for _ in range(n_vertex-1):
        v1,v2=map(int,input().split())
        graph[v1].append(v2)
        graph[v2].append(v1)
    queries=[int(input()) for _ in range(n_queries)]
    size=[1]*(n_vertex+1)
    dfs(root)
    for query in queries:
        print(size[query])

댓글남기기