728x90
๋ฌธ์

ํ์ด
๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ ํ๋ฉด ๋๋ค.
๋จ, ์ผ๋ฐ์ ์ธ ๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ "์์ ๊ฐ์ ์ฌ์ดํด"์ด ์กด์ฌํ๋์ง ์ฌ๋ถ๋ง ๊ตฌํ๋ฉด ๋๋ค.
๋ํ "๋๋ก"๋ ์๋ฐฉํฅ์ด๊ณ "์ํ"์ ๋จ๋ฐฉํฅ์์ ์ฃผ์ํด์ ์ ๋ ฅ๋ฐ์์ผ ํ๋ค.
https://www.youtube.com/watch?v=Ppimbaxm8d8&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=13
์ฝ๋
from sys import stdin
input = stdin.readline
def bf():
for i in range(n):
for j in range(len(edges)):
cur, next, cost = edges[j]
if dist[next] > dist[cur] + cost:
dist[next] = dist[cur] + cost
if i == n - 1:
return True
return False
TC = int(input())
for _ in range(TC):
n, m, w = map(int, input().split())
edges = []
dist = [1e9] * (n + 1)
for i in range(m + w):
s, e, t = map(int, input().split())
if i >= m:
t = -t
else:
edges.append((e, s, t))
edges.append((s, e, t))
if bf():
print("YES")
else:
print("NO")
๋ง๋ฌด๋ฆฌ
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ์ฌํ ์ ์ด ๋ง์ ์ฝ๊ฒ ํ์๋ค.
728x90