[Baekjoon/π₯β ’] 1865: μνβοΈ
πββοΈ μν
λλ 2020λ , λ°±μ€μ΄λ μλλλΌμ ν κ΅λ―Όμ΄λ€. μλλλΌμλ Nκ°μ μ§μ μ΄ μκ³ Nκ°μ μ§μ μ¬μ΄μλ Mκ°μ λλ‘μ Wκ°μ μνμ΄ μλ€. (λ¨ λλ‘λ λ°©ν₯μ΄ μμΌλ©° μνμ λ°©ν₯μ΄ μλ€.) μνμ μμ μμΉμμ λμ°© μμΉλ‘ κ°λ νλμ κ²½λ‘μΈλ°, νΉμ΄νκ²λ λμ°©μ νκ² λλ©΄ μμμ νμμ λλ³΄λ€ μκ°μ΄ λ€λ‘ κ°κ² λλ€. μν λ΄μμλ μκ³κ° κ±°κΎΈλ‘ κ°λ€κ³ μκ°νμ¬λ μ’λ€.
μκ° μ¬νμ λ§€μ° μ’μνλ λ°±μ€μ΄λ ν κ°μ§ κΆκΈμ¦μ λΉ μ‘λ€. ν μ§μ μμ μΆλ°μ νμ¬μ μκ°μ¬νμ νκΈ° μμνμ¬ λ€μ μΆλ°μ νμλ μμΉλ‘ λμμμ λ, μΆλ°μ νμμ λλ³΄λ€ μκ°μ΄ λλμκ° μλ κ²½μ°κ° μλμ§ μλμ§ κΆκΈν΄μ‘λ€. μ¬λ¬λΆμ λ°±μ€μ΄λ₯Ό λμ μ΄λ° μΌμ΄ κ°λ₯νμ§ λΆκ°λ₯νμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±νμ¬λΌ.
πββοΈ μ λ ₯
첫 λ²μ§Έ μ€μλ ν μ€νΈμΌμ΄μ€μ κ°μ TC(1 β€ TC β€ 5)κ° μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ λ λ²μ§Έ μ€λΆν° TCκ°μ ν μ€νΈμΌμ΄μ€κ° μ°¨λ‘λ‘ μ£Όμ΄μ§λλ° κ° ν μ€νΈμΌμ΄μ€μ 첫 λ²μ§Έ μ€μλ μ§μ μ μ N(1 β€ N β€ 500), λλ‘μ κ°μ M(1 β€ M β€ 2500), μνμ κ°μ W(1 β€ W β€ 200)μ΄ μ£Όμ΄μ§λ€. κ·Έλ¦¬κ³ λ λ²μ§Έ μ€λΆν° M+1λ²μ§Έ μ€μ λλ‘μ μ λ³΄κ° μ£Όμ΄μ§λλ° κ° λλ‘μ μ 보λ S, E, T μΈ μ μλ‘ μ£Όμ΄μ§λ€. Sμ Eλ μ°κ²°λ μ§μ μ λ²νΈ, Tλ μ΄ λλ‘λ₯Ό ν΅ν΄ μ΄λνλλ° κ±Έλ¦¬λ μκ°μ μλ―Ένλ€. κ·Έλ¦¬κ³ M+2λ²μ§Έ μ€λΆν° M+W+1λ²μ§Έ μ€κΉμ§ μνμ μ λ³΄κ° S, E, T μΈ μ μλ‘ μ£Όμ΄μ§λλ° Sλ μμ μ§μ , Eλ λμ°© μ§μ , Tλ μ€μ΄λλ μκ°μ μλ―Ένλ€. Tλ 10,000λ³΄λ€ μκ±°λ κ°μ μμ°μ λλ 0μ΄λ€.
λ μ§μ μ μ°κ²°νλ λλ‘κ° ν κ°λ³΄λ€ λ§μ μλ μλ€. μ§μ μ λ²νΈλ 1λΆν° NκΉμ§ μμ°μλ‘ μ€λ³΅ μμ΄ λ§€κ²¨μ Έ μλ€.
πββοΈ μΆλ ₯
TCκ°μ μ€μ κ±Έμ³μ λ§μ½μ μκ°μ΄ μ€μ΄λ€λ©΄μ μΆλ° μμΉλ‘ λμμ€λ κ²μ΄ κ°λ₯νλ©΄ YES, λΆκ°λ₯νλ©΄ NOλ₯Ό μΆλ ₯νλ€.
π©βπ» μ΄λ€ μκ³ λ¦¬μ¦μ μ¬μ©ν΄μΌ ν κΉ?
μ°μ νλμ μ μ μμ λ€λ₯Έ λͺ¨λ μ μ κΉμ§μ μ΅λ¨κ±°λ¦¬λ₯Ό ꡬνλ μκ³ λ¦¬μ¦μ μ¬λ¬ κ°κ° μ‘΄μ¬νλ€.
κ·Έλ λ€λ©΄ κ°κ°μ μκ³ λ¦¬μ¦μ μ μ¬μ©νλ©΄ μλλμ§λ₯Ό νμ ν΄λ³΄μ!!
- λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦
- ν΄λΉ λ¬Έμ μμλ μμ κ°μ μ΄ μ‘΄μ¬νλ―λ‘ λ€μ΅μ€νΈλΌλ μ¬μ©ν μ μλ€.
- νλ‘μ΄λ μμ
- νλ‘μ΄λ μμ μ ν΅ν΄μλ μμ κ°μ€μΉλ₯Ό λ€λ£° μ μλ€.
- λ¬Έμ μ μ μ μ κ°μκ° 500λΌλ μ μμ μκ° λ³΅μ‘λκ° O(N^3)μΈ νλ‘μ΄λ μμ μ μ¬μ©ν μ μλ€.
- νμ§λ§ ν μ€νΈ μΌμ΄μ€κ° μ΅λ 5κ°λΌλ μ μμ μκ°μ΄κ³Όκ° λ°μνλ€.
- 벨λ§ν¬λ μκ³ λ¦¬μ¦
- μμ κ°μ€μΉλ₯Ό λ€λ£° μ μλ€.
- O(VE)λ‘ νλ‘μ΄λ μμ λ³΄λ€ μκ° λ³΅μ‘λκ° μλ€.
λ°λΌμ ν΄λΉ λ¬Έμ λ 벨λ§ν¬λ μκ³ λ¦¬μ¦μΌλ‘ ν΄κ²°ν΄μΌ νλ€!!
(νμλ μ΄λ² λ¬Έμ λ₯Ό ν΅ν΄ μ²μμΌλ‘ 벨λ§ν¬λ μκ³ λ¦¬μ¦μ μ²μ μ νλ€..γ γ γ γ νμ§λ§ νμ΅μ νκ³ λλ μκ³ λ¦¬μ¦μ΄ μκ°λ³΄λ€ κ°λ¨νκ³ , μμ κ°μ€μΉλ₯Ό λ€λ£° λ μ μ©νκ² μ¬μ©ν μ μμ κ² κ°λ€!!)
π©βπ» Code: μμ μ μ μ λ 벨λ§ν¬λ
# bellman ford: μκ°μ΄κ³Ό
import sys
input = sys.stdin.readline
INF = int(1e9)
tc = int(input())
def bellmanFord(start):
dist = [INF] * (n+1)
dist[start] = 0
for i in range(n):
for s, e, t in edges:
if dist[s] != INF and dist[e] > dist[s] + t:
dist[e] = dist[s]+t
if i == n-1:
return True
return False
for _ in range(tc):
n, m, w = map(int, input().split())
edges = []
for _ in range(m):
s, e, t = map(int, input().split())
edges.append((s, e, t))
edges.append((e, s, t))
for _ in range(w):
s, e, t = map(int, input().split())
edges.append((s, e, -t))
check = 0
for i in range(1, n+1):
if bellmanFord(i):
check = 1
break
if check:
print("YES")
else:
print("NO")
ν΄λΉ λ¬Έμ λ μμ μ μ μ΄ μ£Όμ΄μ Έ μμ§ μλ€. λ°λΌμ λͺ¨λ μ μ μ λ€ νμΈνλ λ°©μμΌλ‘ μ κ·Όνλ€λ©΄(μ μ½λ) μκ°μ΄κ³Όκ° λ°μνλ€.
κ·Έλ λ€λ©΄ μ΄λ»κ² μ κ·Όν΄μΌ ν κΉ?? μμμ μ μ μ κ²½μ°μ§ μκ³ λ¨μν μμ μ¬μ΄ν΄λ§μ νμΈν μ μμκΉ??
κ°λ₯μ΄λ€!!!
π©βπ» Code: μμ μ¬μ΄ν΄λ§μ νμΈνλ 벨λ§ν¬λ
# bellman ford: 리ν©ν λ§ (μ λ΅)
import sys
input = sys.stdin.readline
INF = int(1e9)
tc = int(input())
def bellmanFord():
dist = [INF] * (n+1)
for i in range(n):
for s, e, t in edges:
# μμμ μ κ³Ό μΈμ νμ§λ₯Ό νμΈνλ μ½λκ° λΉ μ§κ² λλ€.
if dist[e] > dist[s] + t:
dist[e] = dist[s]+t
if i == n-1:
return True
return False
for _ in range(tc):
n, m, w = map(int, input().split())
edges = []
for _ in range(m):
s, e, t = map(int, input().split())
edges.append((s, e, t))
edges.append((e, s, t))
for _ in range(w):
s, e, t = map(int, input().split())
edges.append((s, e, -t))
# μμ μ μ μ΄ μμ΄ ν λ²μ μ€νμΌλ‘ μμ μ¬μ΄ν΄λ§μ νμ
νλ€.
if bellmanFord():
print("YES")
else:
print("NO")
λκΈλ¨κΈ°κΈ°