10282번: 해킹

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

www.acmicpc.net


다익스트라 알고리즘을 사용하자!

  1. arr에 의존 관계를 저장한다.
  2. time에는 감염되기 까지 걸리는 시간을 저장한다. (default = sys.maxsize)
  3. queue에 시작점 넣고 시작한다.
  4. 저장되어있는 감염시간(time[e])과 이전꺼에서 뻗어나가는 감염시간(w+v) 중 작은 것을 저장한다.
  5. time배열을 순회하며 sys.maxsize가 아닌 max 값과 개수를 구한다.
import sys
import heapq
input = sys.stdin.readline

T = int(input())

for _ in range(T):
    n, d, start = map(int, input().split())
    arr = [[] for _ in range(n+1)]
    time = [sys.maxsize]*(n+1)
    time[start] = 0
    queue = [[0, start]]
    for _ in range(d):
        a, b, s = map(int, input().split())
        arr[b].append([a, s])

    while queue:
        w, s = heapq.heappop(queue)
        for e, v in arr[s]:
            if time[e] > w+v:
                time[e] = w+v
                heapq.heappush(queue, [w+v, e])

    _max = 0
    cnt = 0
    for i in time:
        if i != sys.maxsize:
            _max = max(i, _max)
            cnt += 1

    print(cnt, _max)
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기