#include #include using namespace std; typedef long long int ll; #define UNSEEN 0 #define ZMENSI 1 #define ZVACSI 2 struct Vertex{ int status = UNSEEN; vector susedia; }; int opposite(int status){ return status == ZMENSI ? ZVACSI : ZMENSI; } bool dfs(vector &graph, int v, int newstatus, vector &component) { if (graph[v].status != UNSEEN){ return graph[v].status == newstatus; } component.push_back(v); graph[v].status = newstatus; bool result = true; for (int s: graph[v].susedia) { bool ret = dfs(graph, s, opposite(newstatus), component); result &= ret; } return result; } int main(){ int n; cin >> n; vector x(n), y(n), r(n); vector graph(n); for (int i=0;i>x[i] >> y[i] >>r[i]; } for (int i=0; i p: vector>{{0, 1}, {2, 1}, {0, 2}}){ auto [i, j]=p; graph[i].susedia.push_back(j); graph[j].susedia.push_back(i); }*/ bool result = false; ll tot = 0; for (int i=0; i component; if (dfs(graph, i, ZMENSI, component)){ int sum=0; for (int v: component){ sum += graph[v].status == ZMENSI ? 1 : -1; } if (sum != 0){ result = true; } } tot += component.size(); } } //cout << tot << " === " << n << '\n'; cout << (result ? "YES\n" : "NO\n"); }