forked from ndb796/python-for-coding-test
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path4.py
More file actions
49 lines (44 loc) Β· 1.81 KB
/
Copy path4.py
File metadata and controls
49 lines (44 loc) Β· 1.81 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import sys
input = sys.stdin.readline
INF = int(1e9) # 무νμ μλ―Ένλ κ°μΌλ‘ 10μ΅μ μ€μ
# λ
Έλμ κ°μ, κ°μ μ κ°μλ₯Ό μ
λ ₯λ°κΈ°
n, m = map(int, input().split())
# λͺ¨λ κ°μ μ λν μ 보λ₯Ό λ΄λ 리μ€νΈ λ§λ€κΈ°
edges = []
# μ΅λ¨ 거리 ν
μ΄λΈμ λͺ¨λ 무νμΌλ‘ μ΄κΈ°ν
distance = [INF] * (n + 1)
# λͺ¨λ κ°μ μ 보λ₯Ό μ
λ ₯λ°κΈ°
for _ in range(m):
a, b, c = map(int, input().split())
# aλ² λ
Έλμμ bλ² λ
Έλλ‘ κ°λ λΉμ©μ΄ cλΌλ μλ―Έ
edges.append((a, b, c))
def bf(start):
# μμ λ
Έλμ λν΄μ μ΄κΈ°ν
distance[start] = 0
# μ 체 n - 1λ²μ λΌμ΄λ(round)λ₯Ό λ°λ³΅
for i in range(n):
# λ§€ λ°λ³΅λ§λ€ "λͺ¨λ κ°μ "μ νμΈνλ©°
for j in range(m):
cur_node = edges[j][0]
next_node = edges[j][1]
edge_cost = edges[j][2]
# νμ¬ κ°μ μ κ±°μ³μ λ€λ₯Έ λ
Έλλ‘ μ΄λνλ κ±°λ¦¬κ° λ μ§§μ κ²½μ°
if distance[cur_node] != INF and distance[next_node] > distance[cur_node] + edge_cost:
distance[next_node] = distance[cur_node] + edge_cost
# nλ²μ§Έ λΌμ΄λμμλ κ°μ΄ κ°±μ λλ€λ©΄ μμ μνμ΄ μ‘΄μ¬
if i == n - 1:
return True
return False
# λ²¨λ§ ν¬λ μκ³ λ¦¬μ¦μ μν
negative_cycle = bf(1) # 1λ² λ
Έλκ° μμ λ
Έλ
if negative_cycle:
print("-1")
else:
# 1λ² λ
Έλλ₯Ό μ μΈν λ€λ₯Έ λͺ¨λ λ
Έλλ‘ κ°κΈ° μν μ΅λ¨ 거리λ₯Ό μΆλ ₯
for i in range(2, n + 1):
# λλ¬ν μ μλ κ²½μ°, -1μ μΆλ ₯
if distance[i] == INF:
print("-1")
# λλ¬ν μ μλ κ²½μ° κ±°λ¦¬λ₯Ό μΆλ ₯
else:
print(distance[i])