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");
	}
}

Download