bong-u/til

백준 - 14938 : 서강그라운드 (G4)

수정일 : 2024-11-15

 1N, M, R = map(int, input().split())
 2
 3item = list(map(int, input().split()))
 4G = [[] for _ in range(N)]
 5for _ in range(R):
 6    a, b, c = map(int, input().split())
 7    G[a-1].append((b-1, c))
 8    G[b-1].append((a-1, c))
 9
10def dfs(node, dist):
11    global result
12    if dist > M:
13        return
14    if not visit[node]:
15        result += item[node]
16    visit[node] = True
17
18    for n_node, n_dist in G[node]:
19        dfs(n_node, dist+n_dist)
20
21max_result = 0
22
23for i in range(N):
24    result = 0
25    visit = [False]*N
26    dfs(i, 0)
27    max_result = max(max_result, result)
28
29print (max_result)
  • 분류에 다익스트라, 플로이드-워셜로 되어있지만 DFS로 풀었다

풀이 방법

  • 여기서는 재방문 했다고 해서 탐색을 하지 않으면 안된다
  • 재방문했을때 전에 방문했을 때보다 더 짧은 통로로 들어왔다면 더 많은 아이템을 얻을 수 있기 때문이다
  • 다만, 아이템은 방문할 때마다 얻을 수 있는 것이 아니기 때문에 주의하여야 한다
  • 위의 내용을 질문게시판을 보다가 깨닫고 풀 수 있었다