중량제한
다익스트라 알고리즘에 대해 알아보았다.🌈
CODE
import heapq
import sys
read = sys.stdin.readline
n, m = map(int, read().split())
bridge = list(dict() for _ in range(n+1))
for _ in range(m):
a, b, c = map(int, read().split())
if b in bridge[a]:
bridge[a][b] = max(bridge[a][b], c)
else:
bridge[a][b] = c
if a in bridge[b]:
bridge[b][a] = max(bridge[b][a], c)
else:
bridge[b][a] = c
fac1, fac2 = map(int, read().split())
dp = list(0 for _ in range(n+1))
dp[fac1] = 2147000000
dp[0] = -1
save = []
heapq.heappush(save, [-2147000000, fac1]) #최대힙 사용
while save:
w, p = heapq.heappop(save)
if p == fac2:
break
w = -w
for p_new in bridge[p]:
w_new = bridge[p][p_new]
if dp[p_new] < min(dp[p], w_new):
dp[p_new] = min(dp[p], w_new)
heapq.heappush(save, [-dp[p_new], p_new])
print(dp[fac2])
스티커
소가 길을 건너간 이유7을 풀다가 너무 오래걸릴거 같아서 가벼운 dp문제로 풀었다. 오랜만에 첫 제출에 정답이어서 속시원했다.
CODE
import sys
read=sys.stdin.readline
for _ in range(int(read())):
n=int(read())
num=list(list(map(int,read().split())) for _ in range(2))
dp=list([0,0,0] for _ in range(n))
dp[0]=[num[0][0],num[1][0],0]
for i in range(1,n):
dp[i]=[
max(dp[i-1][1]+num[0][i],
dp[i-1][2]+num[0][i]),max(dp[i-1][0]+num[1][i],
dp[i-1][2]+num[1][i]),max(dp[i-1][0],dp[i-1][1])
]
print(max(dp[-1]))
풀어야 할 문제
- 스타트 택시
- 미네랄
- 아기 상어
- 전깃줄 -2
- 치즈
- 소가 길을 건너간 이유