본문 바로가기

Problem Solving/BOJ-Gold

(Python) 백준 10282 - 해킹

반응형

https://www.acmicpc.net/problem/10282

 

10282번: 해킹

최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면

www.acmicpc.net

 

아이디어

- 가중치가 있는 단방향 그래프에서의 최단 경로 문제로, 다익스트라 알고리즘을 사용한다

- 방문 시간을 업데이트할 때, 기존 시간이 초기값일 시 방문 노드의 개수에 1을 추가해서 구한다

- 방문 시간을 보관한 배열에서 초기값을 제외한 값 중 가장 큰 값이 걸린 시간이다

 

코드

from heapq import *
import sys
input=sys.stdin.readline
f=float('inf')
for _ in range(int(input())):
    n,d,c=map(int,input().split())
    g=[[] for _ in range(n+1)]
    v=[f]*(n+1) # 방문 시간을 매우 큰 값으로 초기화
    for _ in range(d):
        a,b,s=map(int,input().split())
        g[b]+=[(s,a)]
    q=[(0,c)]
    v[c]=0
    n=1 # 방문 횟수
    while q:
        w,c=heappop(q) 
        for (a,x) in g[c]:
            t=w+a
            if t<v[x]:
                if v[x]==f: n+=1 # 기존의 방문 시간이 초기값일 시 방문 횟수 추가
                heappush(q,(t,x))
                v[x]=t
    print(*(n,max([i for i in v if i!=f])))
반응형