728x90
https://www.acmicpc.net/problem/14938
플로이드 워셜, 데이크스트라, 브루트포스의 응용문제다. 나는 플로이드 워셜을 사용했는데, 각 정점에서 다른 정점으로 가는 길이를 모두 구해놓고 탐색 범위 m보다 길이가 작은 수들의 아이템 개수를 저장하고, 각 정점에서 모을 수 있는 아이템 개수들 중에서 최대값을 출력하면 되는 문제다.
코드는 아래에 있다.
더보기
n,m,r=map(int,input().split())
t=[0]+list(map(int,input().split()))
d=[[1e9 for _ in range(n+1)]for _ in range(n+1)]
def floid():
for k in range(n+1):
for i in range(n+1):
for j in range(n+1):
d[i][j]=min(d[i][j],d[i][k]+d[k][j])
for i in range(1,n+1):
d[i][i]=0
for _ in range(r):
a,b,l=map(int,input().split())
d[a][b]=l
d[b][a]=l
floid()
ans=[0 for _ in range(n+1)]
for i in range(1,n+1):
for j in range(1,n+1):
if d[i][j]>m:
continue
ans[i]+=t[j]
print(max(ans))
728x90
'프로그래밍 > Python' 카테고리의 다른 글
[Python][BOJ 6951] Packet Routing (0) | 2023.03.13 |
---|---|
[Python][BOJ 2862] 수학 게임 (0) | 2023.03.11 |
[python][BOJ15973] 두 박스 (0) | 2023.02.18 |
[python][BOJ1225] 이상한 곱셈 (0) | 2023.02.13 |
[python][BOJ2373] Fibonacci Game (0) | 2023.02.12 |
댓글