ROPER - Biến đổi hoán vị
Tác giả: flashmt
Ngôn ngữ: C++
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int n,q,a[100100],p[100100],d[100100];
int main()
{
cin >> n >> q;
for (int i=1;i<=n;i++) scanf("%d",p+i);
for (int i=1;i<=n;i++)
{
int j=i;
while (!d[j]) d[j]=i, j=p[j];
}
for (int i=2;i<=n;i++)
if (d[i]==d[1]) d[i]=d[2];
d[1]=d[2];
int x,y;
while (q--)
{
scanf("%d%d",&x,&y);
puts(d[x]==d[y]?"Yes":"No");
}
}