Problem p03044 (python)

Fixed submission:
import math
import fractions
import bisect
import collections
import itertools
import heapq
import string
import sys
import copy
from collections import deque
sys.setrecursionlimit(10**7)
MOD = 10**9+7
INF = float('inf') #無限大
def gcd(a,b):return fractions.gcd(a,b) #最大公約数
def lcm(a,b):return (a*b) // fractions.gcd(a,b) #最小公倍数
def iin(): return int(sys.stdin.readline()) #整数読み込み
def ifn(): return float(sys.stdin.readline()) #浮動小数点読み込み
def isn(): return sys.stdin.readline().split() #文字列読み込み
def imn(): return map(int, sys.stdin.readline().split()) #整数map取得
def imnn(): return map(lambda x:int(x)-1, sys.stdin.readline().split()) #整数-1map取得
def fmn(): return map(float, sys.stdin.readline().split()) #浮動小数点map取得
def iln(): return list(map(int, sys.stdin.readline().split())) #整数リスト取得
def iln_s(): return sorted(iln()) # 昇順の整数リスト取得
def iln_r(): return sorted(iln(), reverse=True) # 降順の整数リスト取得
def fln(): return list(map(float, sys.stdin.readline().split())) # 浮動小数点リスト取得
def join(l, s=''): return s.join(l) #リストを文字列に変換
def perm(l, n): return itertools.permutations(l, n) # 順列取得
def perm_count(n, r): return math.factorial(n) // math.factorial(n-r) # 順列の総数
def comb(l, n): return itertools.combinations(l, n) # 組み合わせ取得
def comb_count(n, r): return math.factorial(n) // (math.factorial(n-r) * math.factorial(r)) #組み合わせの総数
def two_distance(a, b, c, d): return ((c-a)**2 + (d-b)**2)**.5 # 2点間の距離
def m_add(a,b): return (a+b) % MOD

def sieves_of_e(n):
    is_prime = [True] * (n+1)
    is_prime[0] = False
    is_prime[1] = False
    for i in range(2, int(n**0.5)+1):
        if not is_prime[i]: continue
        for j in range(i * 2, n+1, i): is_prime[j] = False
    return is_prime

N = iin()

edges = [[] for _ in range(N)]

for _ in range(N-1):
    u,v,w = imn()
    u -= 1
    v -= 1
    edges[u].append((v,w))
    edges[v].append((u,w))

colors = [None] * (N)

def set_color(vertex, color):
    colors[vertex] = color
    for v, w in edges[vertex]:
        if colors[v] == None:
            next_color = color
            if w % 2 == 1:
                next_color = (next_color+1)%2
            set_color(v, next_color)
set_color(0, 0)

for c in colors:
    print(c)

Buggy submission (verdict: Runtime Error):
N=int(input())
#頂点の色
colors=[0]*(N)
L=[[] for _ in range(N)]
for i in range(N-1):
  #u,vを長さwでつなぐ
  u,v,w=map(int, input().split())
  L[u-1].append((v-1,w,i))
  L[v-1].append((u-1,w,i))
  
def dfs(start_node, pre_node,is_even, ):
  for next_node,l,i in L[start_node]:
    if next_node==pre_node:
      continue
    if is_even:
      if l%2==0:
        colors[next_node]=0
      else:
        colors[next_node]=1
        is_even=False
    else:
      if l%2==0:
        colors[next_node]=1
      else:
        colors[next_node]=0
        is_even=True
    dfs(next_node, start_node, is_even)
    
dfs(0,-1,True)
for color in colors:
  print(color)

Buggy submission (verdict: Runtime Error):
N=int(input())


R=[[] for _ in range(N)]


for _ in range(N-1):
  u,v,w=map(int, input().split())
  R[u-1].append((v-1,w))
  R[v-1].append((u-1,w))

colors=[None]*N  
def set_color(vertex, color):
  colors[vertex] = color
  for v, w in edges[vertex]:
      if colors[v] == None:
        next_color = color
        if w % 2 == 1:
          next_color = (next_color+1)%2
        set_color(v, next_color)
set_color(0,0)
for c in colors:
  print(c)

Buggy submission (verdict: Runtime Error):
N=int(input())


R=[[] for _ in range(N)]


for _ in range(N-1):
  u,v,w=map(int, input().split())
  R[u-1].append((v-1,w))
  R[v-1].append((u-1,w))

colors=[None]*N  
def set_color(vertex, color):
  colors[vertex] = color
  for v, w in edges[vertex]:
      if colors[v] == None:
        next_color = color
        if w % 2 == 1:
          next_color = (next_color+1)%2
      set_color(v, next_color)
set_color(0,0)
for c in colors:
  print(c)

Buggy submission (verdict: Runtime Error):
N=int(input())
import numpy as np

R=[[] for _ in range(N)]


for _ in range(N-1):
  u,v,w=map(int, input().split())
  R[u-1].append((v-1,w))
  R[v-1].append((u-1,w))

colors=[None]*N  
def set_color(start, color):
  colors[start]=color
  for u,w in R[start]:
    if colors[u]==None:
      if w%2==0:
        next_color=color
        set_color(u,next_color)
      else:
        next_color=(color+1)%2
        set_color(u,next_color)
        
set_color(0,0)
for c in colors:
  print(c)

Buggy submission (verdict: Runtime Error):
N=int(input())
import numpy as np

R=[[] for _ in range(N)]


for _ in range(N-1):
  u,v,w=map(int, input().split())
  R[u-1].append((v-1,w))
  R[v-1].append((u-1,w))

colors=[None]*N  
def set_color(start, color):
  colors[start]=color
  for u,w in R[start]:
    if colors[u]==None:
      if w%2==0:
        next_color=color
        set_color(u,next_color)
      else:
        next_color=(color+1)%2
        set_color(u,next_color)
        
set_color(0,0)
for c in colors:
  print(c)