[BOJ][๐ŸŸก4][๋ฐฑ์ค€#14938] ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #14938


๋ฌธ์ œ

์˜ˆ์€์ด๋Š” ์š”์ฆ˜ ๊ฐ€์žฅ ์ธ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒŒ์ž„ ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ๋ฅผ ์ฆ๊ธฐ๊ณ  ์žˆ๋‹ค. ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ๋Š” ์—ฌ๋Ÿฌ ์ง€์—ญ์ค‘ ํ•˜๋‚˜์˜ ์ง€์—ญ์— ๋‚™ํ•˜์‚ฐ์„ ํƒ€๊ณ  ๋‚™ํ•˜ํ•˜์—ฌ, ๊ทธ ์ง€์—ญ์— ๋–จ์–ด์ ธ ์žˆ๋Š” ์•„์ดํ…œ๋“ค์„ ์ด์šฉํ•ด ์„œ๋ฐ”์ด๋ฒŒ์„ ํ•˜๋Š” ๊ฒŒ์ž„์ด๋‹ค. ์„œ๊ฐ•๊ทธ๋ผ์šด๋“œ์—์„œ 1๋“ฑ์„ ํ•˜๋ฉด ๋ณด์ƒ์œผ๋กœ ์น˜ํ‚จ์„ ์ฃผ๋Š”๋ฐ, ์˜ˆ์€์ด๋Š” ๋‹จ ํ•œ๋ฒˆ๋„ ์น˜ํ‚จ์„ ๋จน์„ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ์ž์‹ ์ด ์น˜ํ‚จ์„ ๋ชป ๋จน๋Š” ์ด์œ ๋Š” ์‹ค๋ ฅ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์•„์ดํ…œ ์šด์ด ์—†์–ด์„œ๋ผ๊ณ  ์ƒ๊ฐํ•œ ์˜ˆ์€์ด๋Š” ๋‚™ํ•˜์‚ฐ์—์„œ ๋–จ์–ด์งˆ ๋•Œ ๊ฐ ์ง€์—ญ์— ์•„์ดํ…œ ๋“ค์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ์„ ํ•˜์˜€์ง€๋งŒ ์–ด๋””๋กœ ๋‚™ํ•˜ํ•ด์•ผ ์ž์‹ ์˜ ์ˆ˜์ƒ‰ ๋ฒ”์œ„ ๋‚ด์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ์•„์ดํ…œ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ฐ ์ง€์—ญ์€ ์ผ์ •ํ•œ ๊ธธ์ด l (1 โ‰ค l โ‰ค 15)์˜ ๊ธธ๋กœ ๋‹ค๋ฅธ ์ง€์—ญ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  ์ด ๊ธธ์€ ์–‘๋ฐฉํ–ฅ ํ†ตํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ์€์ด๋Š” ๋‚™ํ•˜ํ•œ ์ง€์—ญ์„ ์ค‘์‹ฌ์œผ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ ์ˆ˜์ƒ‰ ๋ฒ”์œ„ m (1 โ‰ค m โ‰ค 15) ์ด๋‚ด์˜ ๋ชจ๋“  ์ง€์—ญ์˜ ์•„์ดํ…œ์„ ์Šต๋“ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•  ๋•Œ, ์˜ˆ์€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์•„์ดํ…œ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๋ ค์ฃผ์ž.

์ฃผ์–ด์ง„ ํ•„๋“œ๊ฐ€ ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๊ณ , ์˜ˆ์€์ด์˜ ์ˆ˜์ƒ‰๋ฒ”์œ„๊ฐ€ 4๋ผ๊ณ  ํ•˜์ž. ( ์› ๋ฐ–์˜ ์ˆซ์ž๋Š” ์ง€์—ญ ๋ฒˆํ˜ธ, ์•ˆ์˜ ์ˆซ์ž๋Š” ์•„์ดํ…œ ์ˆ˜, ์„  ์œ„์˜ ์ˆซ์ž๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค) ์˜ˆ์€์ด๊ฐ€ 2๋ฒˆ ์ง€์—ญ์— ๋–จ์–ด์ง€๊ฒŒ ๋˜๋ฉด 1๋ฒˆ,2๋ฒˆ(์ž๊ธฐ ์ง€์—ญ), 3๋ฒˆ, 5๋ฒˆ ์ง€์—ญ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. (4๋ฒˆ ์ง€์—ญ์˜ ๊ฒฝ์šฐ ๊ฐ€๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ 3 + 5 = 8 > 4(์ˆ˜์ƒ‰๋ฒ”์œ„) ์ด๋ฏ€๋กœ 4๋ฒˆ ์ง€์—ญ์˜ ์•„์ดํ…œ์„ ์–ป์„ ์ˆ˜ ์—†๋‹ค.) ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์˜ˆ์€์ด๋Š” 23๊ฐœ์˜ ์•„์ดํ…œ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” ์œ„์˜ ํ•„๋“œ์—์„œ ์˜ˆ์€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์•„์ดํ…œ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜์ด๋‹ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ง€์—ญ์˜ ๊ฐœ์ˆ˜ n (1 โ‰ค n โ‰ค 100)๊ณผ ์˜ˆ์€์ด์˜ ์ˆ˜์ƒ‰๋ฒ”์œ„ m (1 โ‰ค m โ‰ค 15), ๊ธธ์˜ ๊ฐœ์ˆ˜ r (1 โ‰ค r โ‰ค 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” n๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœย  ๊ฐ ๊ตฌ์—ญ์— ์žˆ๋Š” ์•„์ดํ…œ์˜ ์ˆ˜ t (1 โ‰ค t โ‰ค 30)๋ฅผ ์•Œ๋ ค์ค€๋‹ค. ์„ธ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ r+2๋ฒˆ์งธ ์ค„ ๊นŒ์ง€ ๊ธธ ์–‘ ๋์— ์กด์žฌํ•˜๋Š” ์ง€์—ญ์˜ ๋ฒˆํ˜ธ a, b, ๊ทธ๋ฆฌ๊ณ  ๊ธธ์˜ ๊ธธ์ด l (1 โ‰ค l โ‰ค 15)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.


์ถœ๋ ฅ

์˜ˆ์€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์•„์ดํ…œ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

5 5 4
5 7 8 2 3
1 4 5
5 2 4
3 2 3
1 2 3


์ถœ๋ ฅ

23


My Sol

import sys
input = sys.stdin.readline
from heapq import heappop, heappush

def check(s):
    visit = [0]*(V+1)
    Q = [(0, s)]
    nowFarm = 0

    while Q:
        dis, u = heappop(Q)
        if dis > M: continue
        if visit[u]: continue
        visit[u] = 1
        nowFarm += arr[u]

        for v, w in G[u]:
            heappush(Q, (dis+w, v))

    return nowFarm


V, M, E = map(int, input().split())
arr = [0] + list(map(int, input().split()))
G = [[] for _ in range(V+1)]
for _ in range(E):
    u, v, w = map(int, input().split())
    G[u].append((v, w))
    G[v].append((u, w))

maxFarm = 0
for s in range(1, V+1):
    maxFarm = max(maxFarm, check(s))

print(maxFarm)

๋ชจ๋“  ์ง€์ ์„ ์‹œ์ž‘์ ์œผ๋กœ ํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ๊ฑฐ๋ฆฌ๋งŒํผ ๊ฐ€๋ณด๋ฉฐ ํ•ด๋‹น ์ง€์ ์˜ ์•„์ดํ…œ ๊ฐ’์„ ๋”ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋งค ์ง€์ ์„ ๋“ค๋Ÿฌ ๋งค๋ฒˆ ํ™•์ธํ•˜๋ฏ€๋กœ ์™„์ „ํƒ์ƒ‰์„ ํ•˜์ง€๋งŒ, N์ด ์ตœ๋Œ€ 100์ด๋ฏ€๋กœ ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ๋ณด์˜€๋‹ค.

dis๊ฐ€ ์ ์€ ์ˆœ์œผ๋กœ ๋ฝ‘์•„์„œ visit์„ ์ฒดํฌํ•˜๊ฒŒ ํ•˜๋ ค๊ณ  heapq๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

72ms์˜ ๋น ๋ฅธ ์‘๋‹ต์‹œ๊ฐ„์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ