#include <bits/stdc++.h>
using
namespace
std;
struct
Node {
int
L, R, V;
};
bool
check(vector<
int
> Adj[],
int
Src,
int
N,
bool
visited[])
{
int
color[N] = { 0 };
visited[Src] =
true
;
queue<
int
> q;
q.push(Src);
while
(!q.empty()) {
int
u = q.front();
q.pop();
int
Col = color[u];
for
(
int
x : Adj[u]) {
if
(visited[x] ==
true
&& color[x] == Col) {
return
false
;
}
else
if
(visited[x] ==
false
) {
visited[x] =
true
;
q.push(x);
color[x] = 1 - Col;
}
}
}
return
true
;
}
void
addEdge(vector<
int
> Adj[],
int
u,
int
v)
{
Adj[u].push_back(v);
Adj[v].push_back(u);
}
void
isPossible(
struct
Node Arr[],
int
N)
{
vector<
int
> Adj[N];
for
(
int
i = 0; i < N - 1; i++) {
for
(
int
j = i + 1; j < N; j++) {
if
(Arr[i].R < Arr[j].L
|| Arr[i].L > Arr[j].R) {
continue
;
}
else
{
if
(Arr[i].V == Arr[j].V) {
addEdge(Adj, i, j);
}
}
}
}
bool
visited[N] = {
false
};
for
(
int
i = 0; i < N; i++) {
if
(visited[i] ==
false
&& Adj[i].size() > 0) {
if
(check(Adj, i, N, visited)
==
false
) {
cout <<
"No"
;
return
;
}
}
}
cout <<
"Yes"
;
}
int
main()
{
struct
Node arr[] = {
{ 5, 7, 2 }, { 4, 6, 1 },
{ 1, 5, 2 }, { 6, 5, 1 }
};
int
N =
sizeof
(arr) /
sizeof
(arr[0]);
isPossible(arr, N);
return
0;
}
0 comments:
Post a Comment