#include using namespace std; #define rep(i,a,b) for(int i =a; i <(b); ++i) int n, m; vector visited; vector> edges_black; vector> edges_white; void dfs(int v, int comp, vector &cmps, const vector> &adj) { visited[v] = true; cmps[v] = comp; for (int u : adj[v]) { if (!visited[u]) dfs(u, comp, cmps, adj); } } void color(vector &cmps, const vector> &adj) { int comp = 0; visited = vector(n, false); rep(i, 0, n) { if (!visited[i]) { dfs(i, comp, cmps, adj); ++comp; } } } int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); edges_black.clear(); edges_white.clear(); cin >> n >> m; vector> adj_black(n, vector()); vector> adj_white(n, vector()); rep(i, 0, m) { int a,b,c; cin >> a >> b >> c; if (c == 0) { adj_white[a].push_back(b); adj_white[b].push_back(a); edges_white.push_back({a, b}); } else { adj_black[a].push_back(b); adj_black[b].push_back(a); edges_black.push_back({a, b}); } } vector cmps_white(n, -1); vector cmps_black(n, -1); color(cmps_white, adj_white); color(cmps_black, adj_black); for (const auto [a, b] : edges_black) { if (cmps_white[a] == cmps_white[b]) { cout << "NO\n"; return 0; } } for (const auto [a, b] : edges_white) { if (cmps_black[a] == cmps_black[b]) { cout << "NO\n"; return 0; } } cout << "YES\n"; return 0; }