[伯俊]1238パーティー
9776 ワード
https://www.acmicpc.net/problem/1238
N個の数字で区切られた村ごとに学生が住んでいる.
ある日、このN人の学生はX(1≦X≦N)号村でパーティーをすることにした.この村の間にはM本の一方向道路があり、i号道路を通ってti(1≦ti≦100)の時間を費やしている.
学生はみな歩いて村に帰ってパーティーに参加しなければならない.しかし、これらの学生はもともと怠け者で、最短時間で行き来したいと思っています.
これらの道は一方的で、彼らが行く道が違うかもしれません.N人の学生の中で最も多くの時間を費やした学生を探し出す.
1行目はN(1≦N≦1000)、M(1≦M≦10000)と入力し、Xはスペースに区切られる.2列目からM+1列、i号道路の起点、終点、そしてこの道路を通過するのに要する時間は、いずれもTiに入る.始点と終点が同じ道路はなく、始点と一つの都市Aから別の都市Bまでの道路は最大1本である.
すべての学生は家からXに行くことができて、Xから家に帰ることができるデータだけを入力します.
1行目は、N名の学生の中で最も長い時間往復する学生の所要時間を印刷する.
エストラのアルゴリズムを勉強したばかりの人なら、練習問題として解くことができます.
質問する
N個の数字で区切られた村ごとに学生が住んでいる.
ある日、このN人の学生はX(1≦X≦N)号村でパーティーをすることにした.この村の間にはM本の一方向道路があり、i号道路を通ってti(1≦ti≦100)の時間を費やしている.
学生はみな歩いて村に帰ってパーティーに参加しなければならない.しかし、これらの学生はもともと怠け者で、最短時間で行き来したいと思っています.
これらの道は一方的で、彼らが行く道が違うかもしれません.N人の学生の中で最も多くの時間を費やした学生を探し出す.
入力
1行目はN(1≦N≦1000)、M(1≦M≦10000)と入力し、Xはスペースに区切られる.2列目からM+1列、i号道路の起点、終点、そしてこの道路を通過するのに要する時間は、いずれもTiに入る.始点と終点が同じ道路はなく、始点と一つの都市Aから別の都市Bまでの道路は最大1本である.
すべての学生は家からXに行くことができて、Xから家に帰ることができるデータだけを入力します.
しゅつりょく
1行目は、N名の学生の中で最も長い時間往復する学生の所要時間を印刷する.
コミットコード
import sys
import heapq
input = sys.stdin.readline
n, m, x = map(int, input().split())
graph = [[] for _ in range(n + 1)]
answer = [0] * (n + 1)
INF = int(1e9)
distance = [[INF] * (n + 1) for _ in range(n + 1)]
for i in range(m):
a, b, c = map(int, input().split())
graph[a].append((b, c))
for i in range(1, n + 1):
q = []
# start node i
distance[i][i] = 0
heapq.heappush(q, (0, i))
while q:
dist, now = heapq.heappop(q)
if distance[i][now] < dist: continue
for g in graph[now]:
if distance[i][g[0]] > dist + g[1]:
distance[i][g[0]] = distance[i][now] + g[1]
heapq.heappush(q, (distance[i][g[0]], g[0]))
for i in range(1, n + 1):
answer[i] += distance[i][x] + distance[x][i]
print(max(answer))
これは多項式最短距離アルゴリズムPythonの基本例では何の応用もない問題である.エストラのアルゴリズムを勉強したばかりの人なら、練習問題として解くことができます.
Reference
この問題について([伯俊]1238パーティー), 我々は、より多くの情報をここで見つけました https://velog.io/@nayoon-kim/백준-1238.-파티テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol