import sys
def input():
return sys.stdin.readline().rstrip()
N,M,R = map(int,input().split())
arr = [0] + list(map(int,input().split()))
graph = [{} for _ in range(N+1)]
INF = float('inf')
distance = [[0 if i == j else INF for j in range(N+1)] for i in range(N+1)]
for _ in range(R):
x,y,pay = map(int,input().split())
graph[x][y] = min(graph[x].get(y,float('inf')), pay)
graph[y][x] = min(graph[y].get(x, float('inf')),pay)
distance[x][y] = min(distance[x][y],pay)
distance[y][x] = min(distance[y][x],pay)
value = [0 for _ in range(N+1)]
for mid in range(1,N+1):
for start in range(1,N+1):
for end in range(1,N+1):
if distance[start][end] > distance[start][mid] + distance[mid][end]:
distance[start][end] = distance[start][mid] + distance[mid][end]
result = 0
for node in range(1,N+1):
temp = 0
for next_node in range(1,N+1):
if distance[node][next_node] <= M:
temp += arr[next_node]
if temp > result:
result = temp
print(result)
이 문제는 플로이드와샬을 통해 최단거리를 갱신해주고,
N^2를 탐색하면서, 거리가 M 이하일때 더해줘서 최대값을 갱신해서 출력해주는 문제이다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 17090 미로 탈출하기 (0) | 2021.09.03 |
---|---|
[BOJ/백준] 3108 로고 (0) | 2021.09.03 |
[BOJ/백준] 14621 나만 안되는 연애 (0) | 2021.09.02 |
[BOJ/백준] 14391 종이 조각 (0) | 2021.09.02 |
[BOJ/백준] 13418 학교 탐방하기 (0) | 2021.09.02 |