ARC 090 D People on a Line【Python】
問題はこちら。
グラフに負閉路が存在するかどうか。ポテンシャルが矛盾なく定義できることと負閉路が存在しないことが同値であることを利用する。幅優先探索で実装。
from collections import deque
N, M = map(int, input().split())
conn = [[] for _ in range(N)]
for _ in range(M):
L, R, D = map(int, input().split())
L -= 1; R -= 1
conn[L].append((R, D))
conn[R].append((L, -D))
OK = True
potential = [float('inf')]*N
for v in range(N):
if potential[v] == float('inf'):
q = deque([v])
potential[v] = 0
while q:
x = q.popleft()
for y, d in conn[x]:
if potential[y] < float('inf'):
if potential[y] != potential[x] + d:
OK = False
break
continue
potential[y] = potential[x] + d
q.append(y)
if not OK:
break
if not OK:
break
print("Yes" if OK else "No")
この記事が気に入ったらサポートをしてみませんか?