[白俊]10282ハッカー
8557 ワード
https://www.acmicpc.net/problem/10282
最悪のハッカーyum 3がネットワーク施設のパソコンに侵入!今、互いに依存しているパソコンが次々と伝染し始めている.あるコンピュータaが別のコンピュータbに依存すると、bがしばらく感染するとaも感染する.このときbがaに依存しなければ,aが感染してもbは安全である.
最も凶暴なハッカーyum 3がハッカーに攻撃されたコンピュータ番号と依存性が与えられた場合、ハッカーに攻撃されたコンピュータを含む数台のコンピュータが感染し、どのくらいの時間がかかるかを求めるプログラムを作成してください.
最初の行は、テスト例の数を示します.テストケースは最大100件です.各テストケースは次のとおりです.第1行は、コンピュータ個数n、依存個数d、ハッカーによって攻撃されたコンピュータの番号c(1≦n≦10000、1≦d≦100000、1≦c≦n)を与える. は、次いで、各依存性を表す整数a、b、s(1≦a、b≦n、a≠b、0≦s≦1000)をd行に与える.これは、コンピュータaがコンピュータbに依存し、コンピュータbが感染すると、s秒後にコンピュータaも感染することを意味する. 各テストケースにおいて、同じ依存性(a,b)は2回以上存在しない.
各試験例は、1行の総感染コンピュータ数と最後のコンピュータ感染に要する時間をスペースで区切った.
質問する
最悪のハッカーyum 3がネットワーク施設のパソコンに侵入!今、互いに依存しているパソコンが次々と伝染し始めている.あるコンピュータaが別のコンピュータbに依存すると、bがしばらく感染するとaも感染する.このときbがaに依存しなければ,aが感染してもbは安全である.
最も凶暴なハッカーyum 3がハッカーに攻撃されたコンピュータ番号と依存性が与えられた場合、ハッカーに攻撃されたコンピュータを含む数台のコンピュータが感染し、どのくらいの時間がかかるかを求めるプログラムを作成してください.
入力
最初の行は、テスト例の数を示します.テストケースは最大100件です.各テストケースは次のとおりです.
しゅつりょく
各試験例は、1行の総感染コンピュータ数と最後のコンピュータ感染に要する時間をスペースで区切った.
コミットコード
import sys
import heapq
input = sys.stdin.readline
tc = int(input())
INF = int(1e9)
for _ in range(tc):
n, d, c = map(int, input().split())
# 의존
dp = dict()
for i in range(1, n + 1):
dp[i] = []
# 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 그로부터 일정 시간 뒤 a도 감염되고 만다.
# 이때 b가 a를 의존하지 않는다면, a가 감염되더라도 b는 안전하다.
for i in range(d):
a, b, s = map(int, input().split())
dp[b].append((a, s))
visited = [INF] * (n + 1)
q = []
heapq.heappush(q, (0, c))
visited[c] = 0
while q:
dist, now = heapq.heappop(q)
for aa in dp[now]:
cost = aa[1] + dist
if cost < visited[aa[0]]:
visited[aa[0]] = cost
heapq.heappush(q, (cost, aa[0]))
answer1 = n
answer2 = 0
for v in visited[1:]:
if v == INF:
answer1 -= 1
else:
answer2 = max(answer2, v)
print(answer1, answer2)
Reference
この問題について([白俊]10282ハッカー), 我々は、より多くの情報をここで見つけました https://velog.io/@nayoon-kim/백준-10282.-해킹テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol