Buggy python submission (verdict: Time Limit Exceeded):
# 人を頂点と見なしたグラフを作る。有向で、逆向きの場合は正負を反転させて辺を張る
# 頂点からの距離を記録し、一致しない箇所があればNG。
# 全ての辺を通るまで続ける。
# 辺の情報を[{0から行ける頂点},{1から行ける頂点},...]で管理する
# 親には進まないようにしてDFSする

N,M = map(int,input().split())
E = [[] for i in range(N)]
for i in range(M):
  L,R,D = map(int,input().split())
  E[L-1].append([R-1,D])
  E[R-1].append([L-1,-D])
INF = 10 ** 10
from collections import deque
# 頂点、親、距離
dist = [INF] * N
for i in range(N):
  if dist[i] != INF:
    continue
  q = deque()
  q.append([i,-1,0])
  while q:
    v,parent,d = q.popleft()
#    print("v",v,"dist[v]",dist[v],"d",d)
    if dist[v] == INF:
      # 初めてくる場所
      dist[v] = d
    else:
      # 初めてではない場合
      if dist[v] != d:
        print("No")
        exit(0)
      else:
        continue
    for child in E[v]:
      if child == parent:
        continue
      q.append([child[0],v,d + child[1]])
else:
  print("Yes")


Fixed submission:
# 人を頂点と見なしたグラフを作る。有向で、逆向きの場合は正負を反転させて辺を張る
# 頂点からの距離を記録し、一致しない箇所があればNG。
# 全ての辺を通るまで続ける。
# 辺の情報を[{0から行ける頂点},{1から行ける頂点},...]で管理する
# 親には進まないようにしてDFSする

N,M = map(int,input().split())
E = [[] for i in range(N)]
for i in range(M):
  L,R,D = map(int,input().split())
  E[L-1].append([R-1,D])
  E[R-1].append([L-1,-D])
from collections import deque
# 頂点、親、距離
INF = 10 ** 10
dist = [INF] * N
for i in range(N):
  if dist[i] != INF:
    continue
  dist[i] = 0
  q = deque()
  q.append(i)
  while q:
    v = q.popleft()
    for child in E[v]:
      if dist[child[0]] == INF:
        dist[child[0]] = dist[v] + child[1]
        q.append(child[0])
      else:
        if dist[child[0]] != dist[v] + child[1]:
          print("No")
          exit(0)
else:
  print("Yes")

Buggy python submission (verdict: Time Limit Exceeded):
N,M=map(int,input().split())
if M==0:
  print("Yes")
  exit(0)
INF=10**9+1
dist=[INF]*N
from collections import deque
info=deque()
for i in range(M):
  L,R,d=map(int,input().split())
  L,R=L-1,R-1
  info.append([L,R,d])
  
L,R,d=info.popleft()
dist[L]=0
dist[R]=d

while info:
  L,R,d=info.popleft()
  if dist[L]==INF and dist[R]==INF:
    info.append([L,R,d])
  else:
    if dist[L]!=INF and dist[R]==INF:
      dist[R]=dist[L]+d
    elif dist[L]==INF and dist[R]!=INF:
      dist[L]=dist[R]-d
    else:
      if dist[L]+d!=dist[R]:
        print("No")
        exit(0)
print("Yes")


Fixed submission:
# 人を頂点と見なしたグラフを作る。有向で、逆向きの場合は正負を反転させて辺を張る
# 頂点からの距離を記録し、一致しない箇所があればNG。
# 全ての辺を通るまで続ける。
# 辺の情報を[{0から行ける頂点},{1から行ける頂点},...]で管理する
# 親には進まないようにしてDFSする

N,M = map(int,input().split())
E = [[] for i in range(N)]
for i in range(M):
  L,R,D = map(int,input().split())
  E[L-1].append([R-1,D])
  E[R-1].append([L-1,-D])
from collections import deque
# 頂点、親、距離
INF = 10 ** 10
dist = [INF] * N
for i in range(N):
  if dist[i] != INF:
    continue
  dist[i] = 0
  q = deque()
  q.append(i)
  while q:
    v = q.popleft()
    for child in E[v]:
      if dist[child[0]] == INF:
        dist[child[0]] = dist[v] + child[1]
        q.append(child[0])
      else:
        if dist[child[0]] != dist[v] + child[1]:
          print("No")
          exit(0)
else:
  print("Yes")

Buggy python submission (verdict: Time Limit Exceeded):
N,M=map(int,input().split())
if M==0:
  print("Yes")
  exit(0)
INF=10**9+1
dist=[INF]*N
from collections import deque
info=deque()
for i in range(M):
  L,R,d=map(int,input().split())
  L,R=L-1,R-1
  info.append([L,R,d])
  
L,R,d=info.popleft()
dist[L]=0
dist[R]=d

while info:
  L,R,d=info.popleft()
  if dist[L]==INF and dist[R]==INF:
    info.append([L,R,d])
  else:
    if dist[L]!=INF and dist[R]==INF:
      dist[R]=dist[L]+d
    elif dist[L]==INF and dist[R]!=INF:
      dist[L]=dist[R]-d
    else:
      if dist[L]+d!=dist[R]:
        print("No")
        exit(0)
print("Yes")


Fixed submission:
# 人を頂点と見なしたグラフを作る。有向で、逆向きの場合は正負を反転させて辺を張る
# 頂点からの距離を記録し、一致しない箇所があればNG。
# 全ての辺を通るまで続ける。
# 辺の情報を[{0から行ける頂点},{1から行ける頂点},...]で管理する
# 親には進まないようにしてDFSする

N,M = map(int,input().split())
E = [[] for i in range(N)]
for i in range(M):
  L,R,D = map(int,input().split())
  E[L-1].append([R-1,D])
  E[R-1].append([L-1,-D])
from collections import deque
# 頂点、親、距離
INF = 10 ** 10
dist = [INF] * N
for i in range(N):
  if dist[i] != INF:
    continue
  dist[i] = 0
  q = deque()
  q.append(i)
  while q:
    v = q.popleft()
    for child in E[v]:
      if dist[child[0]] == INF:
        dist[child[0]] = dist[v] + child[1]
        q.append(child[0])
      else:
        if dist[child[0]] != dist[v] + child[1]:
          print("No")
          exit(0)
else:
  print("Yes")

Buggy python submission (verdict: Time Limit Exceeded):
N,M=map(int,input().split())
if M==0:
  print("Yes")
  exit(0)
INF=10**9+1
dist=[INF]*N
info=[None]*M
for i in range(M):
  L,R,d=map(int,input().split())
  L,R=L-1,R-1
  info[i]=[L,R,d]
  
checked=[False]*M
L,R,d=info[0]
checked[0]=True
dist[L]=0
dist[R]=d

def ifNotFinished():
  for c in checked:
    if c==False:
      return True
while ifNotFinished():
  for i in range(len(info)):
    if not checked[i]:
      L,R,d=info[i]
      if dist[L]==INF and dist[R]==INF:
        continue
      else:
        if dist[L]!=INF and dist[R]==INF:
          dist[R]=dist[L]+d
        elif dist[L]==INF and dist[R]!=INF:
          dist[L]=dist[R]-d
        else:
          if dist[L]+d!=dist[R]:
            print("No")
            exit(0)
      checked[i]=True
print("Yes")

Fixed submission:
# 人を頂点と見なしたグラフを作る。有向で、逆向きの場合は正負を反転させて辺を張る
# 頂点からの距離を記録し、一致しない箇所があればNG。
# 全ての辺を通るまで続ける。
# 辺の情報を[{0から行ける頂点},{1から行ける頂点},...]で管理する
# 親には進まないようにしてDFSする

N,M = map(int,input().split())
E = [[] for i in range(N)]
for i in range(M):
  L,R,D = map(int,input().split())
  E[L-1].append([R-1,D])
  E[R-1].append([L-1,-D])
from collections import deque
# 頂点、親、距離
INF = 10 ** 10
dist = [INF] * N
for i in range(N):
  if dist[i] != INF:
    continue
  dist[i] = 0
  q = deque()
  q.append(i)
  while q:
    v = q.popleft()
    for child in E[v]:
      if dist[child[0]] == INF:
        dist[child[0]] = dist[v] + child[1]
        q.append(child[0])
      else:
        if dist[child[0]] != dist[v] + child[1]:
          print("No")
          exit(0)
else:
  print("Yes")