#include using namespace std; #define ll long long #define vl vector #define vll vector> ll n, m; vector>> edges; void dfs(ll i, ll t, ll c, vl& comp, vector>>& graf){ comp[i] = c; for (auto x : graf[i]){ if (x.second == t && comp[x.first] == -1){ dfs(x.first, t, c, comp, graf); } } } bool solve(ll t, vector>>& graf){ vl comp (n, -1); ll c = 0; for (ll i = 0; i < n; i++){ if (comp[i] == -1){ dfs(i, t ,c, comp, graf); c++; } } for (auto x : edges[1-t]){ if (comp[x.first] == comp[x.second]){ return true; } } return false; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; vector>> graf(n); edges.resize(2); for (ll i = 0; i < m; i++){ ll a,b,c; cin >> a >> b >> c; graf[a].push_back({b, c}); graf[b].push_back({a, c}); edges[c].push_back({a, b}); } bool a1, a2; a1 = solve(0, graf); a2 = solve(1, graf); if (a1 || a2){ cout << "NO\n"; } else{ cout << "YES\n"; } }