import sys from collections import deque n, m = [int(x) for x in input().split(" ")] edges = [] for i in range(n): edges.append([]) for _ in range(m): a, b, barva = [int(x) for x in input().split(" ")] edges[a].append((b, barva)) edges[b].append((a, barva)) skore = [] for _ in range(n): skore.append((0, 0)) zpetneHrany = [] for _ in range(n): zpetneHrany.append([]) visited = [False] * n initnode = 0 stack = deque() stack.append((initnode, None)) while len(stack) > 0: node, prev = stack.pop() if visited[node]: continue visited[node] = True # print(node) for nbr, clr in edges[node]: if not visited[nbr]: stack.append((nbr, node)) if (clr == 0): skore[nbr] = (skore[node][0] + 1, skore[node][1]) else: skore[nbr] = (skore[node][0], skore[node][1] + 1) elif nbr != prev and prev is not None: # zpetna hrana node do nbr # print(f"zpetna hrana z {node} dp {nbr}") zpetneHrany[node].append(nbr) barva = [0, 0] barva[clr] = 1 pocet_c = skore[node][0] - skore[nbr][0] + barva[0] pocet_m = skore[node][1] - skore[nbr][1] + barva[1] if (pocet_c == 1 or pocet_m == 1): print("NO") sys.exit() pass for odkud in range(n): for kam1 in zpetneHrany[odkud]: for kam2 in zpetneHrany[odkud]: if kam1 >= kam2: continue barva = [] hrany = edges[odkud] for nbr, clr in hrany: if (nbr == kam1 or nbr == kam2): barva[clr] += 1 pocet_c = abs(skore[kam1][0] - skore[kam2][0]) + barva[0] pocet_m = abs(skore[kam1][1] - skore[kam2][1]) + barva[1] if (pocet_c == 1 or pocet_m == 1): print("NO") sys.exit() # print(node) # print(skore) print("YES") # dfs_pole = [] # tuple[ jmeno, modra, cervena ] # iin = [] # pozice i - in(i) # out = [] # pozice i - out(i) # stav = [] # 0 - nenalezeny 1 - otevreny 2 - uzavreny 3 - na stacku # # T = 0 # # for _ in range(n): # stav.append(0) # iin.append(-1) # out.append(-1) # # # def dfs(): # global T # stack = [] # stack.append(0) # # while len(stack) != 0: # vrchol = stack[-1] # print(vrchol) # if (stav[vrchol] == 1): # vrchol = stack.pop() # stav[vrchol] = 2 # T += 1 # out[vrchol] = T # continue # stav[vrchol] = 1 # T += 1 # iin[vrchol] = T # hrany_v = edges[vrchol] # for soused in hrany_v: # if (stav[soused[0]] == 0): # stack.append(soused[0]) # stav[soused[0]] = 3 # # dfs() # # print(iin) # print(out)