Buggy python submission (verdict: Time Limit Exceeded):
n=int(input())
li=[list(map(int,input().split())) for i in range(n-1)]

#色の情報を記録する配列を作る。0が白で、1が黒
col=[-1]*(n+1) #最初は全ての頂点が情報なし。
col[1]=0 #頂点1の色は白。

#2点間の距離の情報を記録する配列を作る
#ついでにグラフも作る
kyori=[[0]*(n+1) for i in range(n+1)]
graph = [[] for _ in range(n+1)]

for x,y,z in li:
  kyori[x][y]=kyori[y][x]=z
  graph[x].append(y)
  graph[y].append(x)

def dfs(v):
    dist = [-1] * (n+1)
    stack = [v]
    dist[v] = 0
    while stack:
        v = stack.pop()
        dw = dist[v] + 1
        for w in graph[v]: #頂点vに接続してる点についての調査
            if dist[w] >= 0: #0以上であれば既に調査済み
                continue
            dist[w] = dw #調査済みでない場合は、distに現在の深さを記録。
            if kyori[v][w]%2:
              col[w]=col[v]^1
            else:
              col[w]=col[v]
            stack.append(w)
    return col
print(*dfs(1)[1:], sep="\n")

Fixed submission:
n=int(input())
li=[list(map(int,input().split())) for i in range(n-1)]

#色の情報を記録する配列を作る。0が白で、1が黒
col=[-1]*(n+1) #最初は全ての頂点が情報なし。
col[1]=0 #頂点1の色は白。

#2点間の距離の情報を記録する配列を作る…と思ったがO(n^2)やわこれ
#ついでにグラフも作る。距離の情報はグラフに入れることにしよう
graph = [[] for _ in range(n+1)]

for x,y,z in li:
  graph[x].append([y,z])
  graph[y].append([x,z])

def dfs(v):
    dist = [-1] * (n+1)
    stack = [v]
    dist[v] = 0
    while stack:
        v = stack.pop()
        dw = dist[v] + 1
        for w,z in graph[v]: #頂点vに接続してる点についての調査
            if dist[w] >= 0: #0以上であれば既に調査済み
                continue
            dist[w] = dw #調査済みでない場合は、distに現在の深さを記録。
            if z%2:
              col[w]=col[v]^1
            else:
              col[w]=col[v]
            stack.append(w)
    return col
print(*dfs(1)[1:], sep="\n")

Buggy python submission (verdict: Time Limit Exceeded):
n=int(input())
li=[list(map(int,input().split())) for i in range(n-1)]

#色の情報を記録する配列を作る。0が白で、1が黒
col=[-1]*(n+1) #最初は全ての頂点が情報なし。
col[1]=0 #頂点1の色は白。

#2点間の距離の情報を記録する配列を作る
#ついでにグラフも作る
kyori=[[0]*(n+1) for i in range(n+1)]
graph = [[] for _ in range(n+1)]

for x,y,z in li:
  kyori[x][y]=kyori[y][x]=z
  graph[x].append(y)
  graph[y].append(x)

def dfs(v):
    dist = [-1] * (n+1)
    stack = [v]
    dist[v] = 0
    while stack:
        v = stack.pop()
        dw = dist[v] + 1
        for w in graph[v]: #頂点vに接続してる点についての調査
            if dist[w] >= 0: #0以上であれば既に調査済み
                continue
            dist[w] = dw #調査済みでない場合は、distに現在の深さを記録。
            if kyori[v][w]%2:
              col[w]=col[v]^1
            else:
              col[w]=col[v]
            stack.append(w)
    return col
print(*dfs(1)[1:], sep="\n")

Fixed submission:
n=int(input())
li=[list(map(int,input().split())) for i in range(n-1)]

#色の情報を記録する配列を作る。0が白で、1が黒
col=[-1]*(n+1) #最初は全ての頂点が情報なし。
col[1]=0 #頂点1の色は白。

#2点間の距離の情報を記録する配列を作る…と思ったがO(n^2)やわこれ
#ついでにグラフも作る。距離の情報はグラフに入れることにしよう
graph = [[] for _ in range(n+1)]

for x,y,z in li:
  graph[x].append([y,z])
  graph[y].append([x,z])

def dfs(v):
    dist = [-1] * (n+1)
    stack = [v]
    dist[v] = 0
    while stack:
        v = stack.pop()
        dw = dist[v] + 1
        for w,z in graph[v]: #頂点vに接続してる点についての調査
            if dist[w] >= 0: #0以上であれば既に調査済み
                continue
            dist[w] = dw #調査済みでない場合は、distに現在の深さを記録。
            if z%2:
              col[w]=col[v]^1
            else:
              col[w]=col[v]
            stack.append(w)
    return col
print(*dfs(1)[1:], sep="\n")