# 해킹
import heapq
import sys
input = sys.stdin.readline
def hacking(n, start):
dist = [sys.maxsize] * (n+1)
dist[start] = 0
q = []
heapq.heappush(q, (0, start))
while q:
time, computer = heapq.heappop(q)
for ntime, ncom in arr[computer]:
total = time + ntime
if dist[ncom] > total:
dist[ncom] = total
heapq.heappush(q, (total, ncom))
result_time = 0
result_com = 0
for x in dist:
if x != sys.maxsize:
result_com += 1
result_time = max(result_time, x)
return [result_com, result_time]
T = int(input())
for _ in range(T):
n, d, c = map(int, input().split())
arr = [[] for _ in range(n+1)]
for _ in range(d):
a, b, s = map(int, input().split())
arr[b].append((s, a))
print(*hacking(n, c))
최단거리, 다익스트라
1. 의존성에 맞춰서 입력을 받는다. (arr[b].append((s, a)) => a가 b를 의존)
2. hacking(n, c) : n개의 컴퓨터 중, c컴퓨터에서 부터 해킹 시작
- start에서 각 컴퓨터까지의 거리를 dist리스트로 표현
- dist를 최소값으로 업데이트 (heapq를 이용)
- dist에서 maxsize가 아닌 값들 마다 result_com++, dist에서 해당 거리 값 중 가장 큰 값을 result_time으로
- return [result_com, result_time]
3. 출력
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 6497번 - 전력난 (파이썬) (0) | 2022.03.13 |
---|---|
[백준] 19236번 - 청소년 상어 (파이썬) (0) | 2022.03.12 |
[백준] 2473번 - 세 용액 (파이썬) (0) | 2022.03.10 |
[백준] 2470번 - 두 용액 (파이썬) (0) | 2022.03.10 |
[백준] 2812번 - 크게 만들기 (파이썬) (0) | 2022.03.09 |