#include // #pragma GCC optimize("Ofast") // #pragma GCC optimize("unroll-loops") #define int long long #define ld long double #define vec vector #define all(m) (m).begin(), (m).end() #define forn(i,n) for(int i=0;i<(n);i++) using namespace std; typedef pair pii; int mod = 1e9+7; int fnd(int v, vec &p) { if (v == p[v]) return v; return p[v] = fnd(p[v],p); } void mrg(int a, int b, vec &p, vec &sz) { a = fnd(a, p); b = fnd(b, p); if (a == b) return; if (sz[a]>sz[b]) swap(a, b); p[a] = b; sz[b] += sz[a]; } void solve() { int n,m; cin>>n>>m; vec e1; vec e2; forn(i,m) { int a,b,c; cin>>a>>b>>c; if (c) e2.push_back(pii(a,b)); else e1.push_back(pii(a,b)); } vec p1(n); vec sz1(n,1); vec p2(n); vec sz2(n,1); forn(i,n) { p1[i] = i; p2[i] = i; } bool ans = true; for (pii e: e1) { mrg(e.first,e.second,p1,sz1); } for (pii e: e2) { mrg(e.first,e.second,p2,sz2); } for (pii e: e1) { ans = ans && (fnd(e.first,p2)!=fnd(e.second,p2)); } for (pii e: e2) { ans = ans && (fnd(e.first,p1)!=fnd(e.second,p1)); } if (ans) cout<<"YES"<<'\n'; else cout<<"NO"<<'\n'; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int tt = 1; // cin>>tt; while (tt--) solve(); return 0; }