#include #include #define ll long long using namespace std; const int MAXN = 300005; vector> adj[MAXN]; vector redc(MAXN, 0), bluec(MAXN, 0); vector visited(MAXN, -1); bool dfs(int node, int par, int red, int blue, int iter){ redc[node] = red; bluec[node] = blue; visited[node] = iter; for(auto &[nxt, col] : adj[node]){ if(nxt==par) continue; if(col==0) blue++; else red++; if(visited[nxt]!=-1){ if(visited[nxt]==iter){ // backltrack mam loop co osm nasiel teraz // kontrola int cycleR = red-redc[nxt]; int cycleB = blue-bluec[nxt]; if(cycleR==0||cycleB==0){ return 1; }else if(cycleR>=2&&cycleB>=2){ // mam aspon 2 return 1; }else{ return 0; } }else{ return 1; } } return dfs(nxt, node, red, blue, iter); } } int main(void){ int n, m; cin >> n >> m; for(int i = 0; i < m; ++i){ int u, v, c; cin >> u >> v >> c; adj[u].push_back({v,c}); adj[v].push_back({u,c}); } for(int i = 0; i < n ;++i){ if(visited[i]==-1){ if(!dfs(i, -1, 0, 0, i)){ cout << "NO\n"; return 0; } } } cout << "YES\n"; return 0; }