๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“Š Algorithm/BOJ

โœ… BOJ 14938 - N๋ฒˆ ๋‹ค์ต์ŠคํŠธ๋ผ

by huis_log 2025. 7. 16.

๋ฌธ์ œ

์•„์ดํ…œ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„ ๊ฐ ์ง€์—ญ(๋…ธ๋“œ) ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๋ฉด์„œ, ์˜ˆ์€์ด๊ฐ€ ํ•œ ๋ฒˆ์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์•„์ดํ…œ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

 

์ „๋žต

ํ•ต์‹ฌ์€ ๋‹ค์ต์ŠคํŠธ๋ผ. ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์˜ˆ์€์ด์˜ ์‹œ์ž‘์ ์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘์ ์œผ๋กœ ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ๋Œ๋ ค์•ผ ํ•จ.

๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ๊ตฌํ•œ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ์ค‘, ๊ฑฐ๋ฆฌ๊ฐ€ 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()
๋ฐ˜์‘ํ˜•