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