#include using namespace std; using ll = long long; using vi = vector; using vvi = vector>; using pii = pair; using vll = vector; using str = string; using vstr = vector; #define PB push_back #define ALL(x) (x).begin() (x).end() #define FOR(i,s,f) for(int (i) = (s); i < (f); i++) using vpll = vector>; long long n, m; bool riesenie(vpll& kostra, vpll& query) { vector parent(n, -1); vector depth(n, 1); for (auto hrana : kostra) { long long a = hrana.first; long long b = hrana.second; while (parent[a] != -1) a = parent[a]; while (parent[b] != -1) b = parent[b]; if (depth[a] >= depth[b]) { parent[b] = a; depth[a] = max(depth[a], depth[b] + 1); } else { parent[a] = b; depth[b] = max(depth[b], depth[a] + 1); } } for (auto hrana : query) { long long a = hrana.first; long long b = hrana.second; while (parent[a] != -1) a = parent[a]; while (parent[b] != -1) b = parent[b]; if (a == b) return false; } return true; } int main(){ cin >> n >> m; vector> hrany_blue; vector> hrany_red; for (long long i = 0; i < m; i++) { long long a, b, farba; cin >> a >> b >> farba; if (farba) hrany_blue.push_back(make_pair(a, b)); else hrany_red.push_back(make_pair(a, b)); } if (riesenie(hrany_blue, hrany_red) && riesenie(hrany_blue, hrany_red)) { cout << "YES" << '\n'; } else { cout << "NO" << '\n'; } }