#include using namespace std; #define sz(x) (int)x.size() using ll = long long; using ull = unsigned long long; signed main() { int n, m; cin >> n >> m; using Edge = struct { int next, blue; }; vector> g(n); int u, v, blue; for (int i = 0; i < m; i++) { cin >> u >> v >> blue; g[u].push_back(Edge(v, blue)); g[v].push_back(Edge(v, blue)); } vector vis(n, false); for (int i = 0; i < n; i++) { if (vis[i]) continue; vis[i] = true; vector q; q.push_back(i); for (int j = 0; j < sz(g[i]); j++) { if (vis[g[i][j].next]) continue; vis[g[i][j].next] = true; int pivot = g[i][j].blue; while (!q.empty()) { int cur = q.back(); q.pop_back(); for (int i = 0; i < sz(g[cur]); i++) { if (g[cur][i].blue != pivot) { cout << "NO" << '\n'; return 0; } if (vis[g[cur][i].next]) continue; vis[g[cur][i].next] = true; q.push_back(g[cur][i].next); } } } } cout << "YES" << '\n'; return 0; }