#include using namespace std; vector R, B; vector>> G; void find_cp(int v, int c, int i, vector& A){ A[v] = i; for(auto& it : G[v]){ if (!A[it.first] && it.second == c) { find_cp(it.first, c, i, A); } } } int main(){ int n, m; cin >> n >> m; int u, v, c; G.resize(n); R.resize(n); B.resize(n); for(int i = 0; i < m; i++){ cin >> u >> v >> c; G[u].push_back({v, c}); G[v].push_back({u, c}); } for(int i = 0; i < n; i++){ if (!R[i]) find_cp(i, 0, i + 1, R); if (!B[i]) find_cp(i, 1, i + 1, B); } for(int i = 0; i < n; i++){ for(auto &it : G[i]){ if (it.second == 0){ if (B[i] == B[it.first]) { cout << "NO" << endl; return 0; } } else { if (R[i] == R[it.first]){ cout << "NO" << endl; return 0; } } } } cout << "YES" << endl; }