-
Notifications
You must be signed in to change notification settings - Fork 0
/
abc012_d.py
35 lines (28 loc) · 1.17 KB
/
abc012_d.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# AtCoder Beginner Contest 012 D - バスと避けられない運命
# https://atcoder.jp/contests/abc012/tasks/abc012_4
# tag: ワーシャル・フロイド法 典型問題 高橋君
# 結局のところ各バス停間全通りの移動コストを確認する
# 必要があるので、ワーシャル・フロイド法を用いる。
# あとは、バス停ごとに最大コストを比較すればいい。
def main():
N, M = map(int, input().split())
bus_dat = [list(map(int, input().split())) for _ in range(M)]
# 0-indexed に修正しつつ、移動時間の隣接行列を作成する。
dist = [[10**10] * N for _ in range(N)]
for i in range(N):
dist[i][i] = 0
for a, b, t in bus_dat:
a -= 1
b -= 1
dist[a][b] = t
dist[b][a] = t
# ワーシャル・フロイド法
for k in range(N):
for i in range(N):
for j in range(N):
if dist[i][j] > dist[i][k] + dist[k][j]:
dist[i][j] = dist[i][k] + dist[k][j]
# 改めて、各バス停ごとの最大コストの最小値を求める。
result = min(max(dist[i]) for i in range(N))
print(result)
main()