ROPER - Biến đổi hoán vị
Tác giả: ladpro98
Ngôn ngữ: C++
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int p[N];
int cycle[N];
int n, m, nCycle;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; ++i) cin >> p[i];
for (int i = 1; i <= n; ++i) if (!cycle[i]) {
++nCycle;
for (int j = i; !cycle[j]; j = p[j])
cycle[j] = nCycle;
}
int u, v;
while (m--) {
cin >> u >> v;
bool YES = cycle[u] == cycle[v];
YES |= cycle[u] == cycle[1] && cycle[v] == cycle[2];
YES |= cycle[u] == cycle[2] && cycle[v] == cycle[1];
cout << (YES ? "Yes\n" : "No\n");
}
return 0;
}