๋ฌธ์
์์ดํ ์๊ฐ ์ฃผ์ด์ง ๊ฐ ์ง์ญ(๋ ธ๋) ์ฌ์ด๋ฅผ ์ด๋ํ๋ฉด์, ์์์ด๊ฐ ํ ๋ฒ์ ์ป์ ์ ์๋ ์ต๋ ์์ดํ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ .
์ ๋ต
ํต์ฌ์ ๋ค์ต์คํธ๋ผ. ๋ชจ๋ ๋ ธ๋๊ฐ ์์์ด์ ์์์ ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ์์์ ์ผ๋ก ๋ค์ต์คํธ๋ผ๋ฅผ ๋๋ ค์ผ ํจ.
๋ค์ต์คํธ๋ผ๋ก ๊ตฌํ ์ต๋จ๊ฑฐ๋ฆฌ ์ค, ๊ฑฐ๋ฆฌ๊ฐ m ์ดํ์ธ ๋ ธ๋๋ค์ ์์ดํ ์๋ง ๋์ ํด์ ์ต๋๊ฐ์ ๊ฐฑ์ .
๊ทธ๋ํ๋ ๋ฌด๋ฐฉํฅ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ฝ์ ์ graph[a].append((w, b)), graph[b].append((w, a)) ์์ชฝ ๋ค ๋ฃ์ด์ผ ํจ.
์๊ฐ๋ณต์ก๋๋ O(N * (E log N)) ์ ๋๋ก ๊ฐ๋น ๊ฐ๋ฅ.
๊ทธ๋ฅ ๋ค์ต์คํธ๋ผ ์ฌ๋ฌ ๋ฒ ๋๋ฆฌ๋ ๋ฌธ์ ๋ผ๊ณ ๋ณด๋ฉด ๋จ.
# N๋ฒ ๋ค์ต์คํธ๋ผ ๋๋ฆฌ๊ธฐ
import sys,heapq
input=sys.stdin.readline
def dijkstra(start,n,graph):
INF=float("inf")
distance=[INF]*n
distance[start]=0
heap=[]
heapq.heappush(heap,(0,start))
while heap:
weight,current_node=heapq.heappop(heap)
for new_weight,next_node in graph[current_node]:
cost=weight+new_weight
if cost<distance[next_node]:
distance[next_node]=cost
heapq.heappush(heap,(cost,next_node))
return distance
def find_max_items_cnt(distance,m,nodes):
total=0
for i in range(len(distance)):
if distance[i]<=m:
total+=nodes[i]
return total
def main():
n,m,r=map(int,input().split())
nodes=list(map(int,input().split()))
graph=[[] for _ in range(n+1)]
max_val=-1
for _ in range(r):
start,end,weight=map(int,input().split())
start-=1
end-=1
graph[start].append((weight,end))
graph[end].append((weight,start))
for i in range(n):
distance=dijkstra(i,n,graph)
max_val=max(max_val,find_max_items_cnt(distance,m,nodes))
print(max_val)
if __name__=="__main__":
main()๋ฐ์ํ
'๐ Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โ BOJ 11779 - dijkstra + ๊ฒฝ๋ก ์ถ์ (0) | 2025.07.18 |
|---|---|
| โ BOJ 2638 - BFS ์์ฉ (2) | 2025.07.17 |
| โ BOJ 30805 - LCS(Longest Common Subsequence) (0) | 2025.07.15 |
| โ BOJ 13172 - pow ์ฐ์ฐ (๋ถํ ์ ๋ณต ๊ฑฐ๋ญ์ ๊ณฑ, ๋ชจ๋๋ฌ ์ญ์) (1) | 2025.07.14 |
| โ BOJ 10830 - ํ๋ ฌ ์ ๊ณฑ (0) | 2025.07.12 |