import
java.util.*;
class
Main {
static
int
find(
int
[] parent,
int
i) {
if
(parent[i] == i)
return
i;
parent[i] = find(parent, parent[i]);
return
parent[i];
}
static
void
unionSets(
int
[] parent,
int
i,
int
j) {
parent[find(parent, j)] = find(parent, i);
}
static
String canSortArray(List<Integer> arr, List<Pair<Integer, Integer>> pairs) {
int
n = arr.size();
int
[] parent =
new
int
[n];
for
(
int
i =
0
; i < n; i++)
parent[i] = i;
for
(Pair<Integer, Integer> p : pairs)
unionSets(parent, p.first, p.second);
for
(
int
i =
0
; i < n; i++) {
if
(find(parent, i) != find(parent, arr.get(i)))
return
"No"
;
}
return
"Yes"
;
}
public
static
void
main(String[] args) {
List<Integer> arr = Arrays.asList(
0
,
4
,
3
,
2
,
1
,
5
);
List<Pair<Integer, Integer>> pairs = Arrays.asList(
new
Pair<>(
1
,
4
),
new
Pair<>(
2
,
3
));
System.out.println(canSortArray(arr, pairs));
arr = Arrays.asList(
1
,
2
,
3
,
0
,
4
);
pairs = Arrays.asList(
new
Pair<>(
2
,
3
));
System.out.println(canSortArray(arr, pairs));
}
}
class
Pair<A, B> {
public
A first;
public
B second;
public
Pair(A first, B second) {
this
.first = first;
this
.second = second;
}
}