题目
As you could know there are no male planes nor female planes. However, each plane on Earth likes some other plane. There are n planes on Earth, numbered from 1 to n, and the plane with number i likes the plane with number fi, where 1 ≤ fi ≤ n and fi ≠ i.
We call a love triangle a situation in which plane A likes plane B, plane B likes plane C and plane C likes plane A. Find out if there is any love triangle on Earth.
Input
The first line contains a single integer n (2 ≤ n ≤ 5000) — the number of planes.
The second line contains n integers f1, f2, ..., fn (1 ≤ fi ≤ n, fi ≠ i), meaning that the i-th plane likes the fi-th.
Output
Output «YES» if there is a love triangle consisting of planes on Earth. Otherwise, output «NO».
You can output any letter in lower case or in upper case.
Examples
input
5 2 4 5 1 3
output
YES
input
5 5 5 5 5 1
output
NO
Note
In first example plane 2 likes plane 4, plane 4 likes plane 1, plane 1 likes plane 2 and that is a love triangle.
In second example there are no love triangles.
反思
一开始想的是找一个三个点的环, 但不允许访问访问过的点就会判不了环
允许访问有的数据就会死循环
代码
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
#define _for(i,a,b) for(int i=(a);i<(b);i++)
#define _rep(i,a,b) for(int i=(a);i<=(b);i++)
typedef pair<int, int> PLL;
typedef long long ll;
const int N = 5e3+5;
const int INF = 0x3f3f3f3f;
int readint(){
int x;scanf("%d",&x);return x;
}
int n;
int f[N];
int main()
{
n = readint();
_rep(i, 1, n) f[i] = readint();
bool ok = false;
_rep(i, 1, n)
// 我喜欢的人喜欢的人喜欢我 -> 三角恋
if(f[f[f[i]]] == i) ok = true;
if(ok) puts("YES");
else puts("NO");
return 0;
}