# 15591 MooTube
N,Q = map(int,input().split())
graph = {i:[] for i in range(N+1)}
for _ in range(N-1):
A,B,USADO = map(int,input().split())
graph[A].append((B,USADO))
graph[B].append((A,USADO))
for _ in range(Q):
K,start = map(int,input().split())
visited = [True]*(N+1)
visited[start] = False
stack = [(start,float('inf'))]
result = 0
while stack:
node,usado = stack.pop()
for next_node,next_usado in graph[node]:
next_usado = min(usado,next_usado)
if next_usado >= K and visited[next_node]:
result += 1
stack.append((next_node,next_usado))
visited[next_node] = False
print(result)
그래프을 활용한 문제이다. 여기서는 주어진 node를 기준으로 연결이 되어있는 것을 전부 확인하면서, 최소 USADO를 갱신해주면 된다. 그래서 만약에 중간에 주어진 K보다 USADO가 나올시에는 멈추도록해주고, 그외에 방문하지 않은 노드이고, K보다 큰 usado일때에는 stack에 넣어서 계속 check를 해주었다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 9020 골드바흐의 추측 (0) | 2021.02.13 |
---|---|
[BOJ/백준] 1107 리모컨 (0) | 2021.02.13 |
[BOJ/백준] 1987 알파벳 (0) | 2021.02.03 |
[BOJ/백준] 1655 가운데로 말해요 (0) | 2021.02.02 |
[BOJ/백준] 3197 백조의 호수 (0) | 2021.02.01 |