题目链接:http://codeforces.com/problemset/problem/939/A
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.
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 «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.
5
2 4 5 1 3
YES
5
5 5 5 5 1
NO
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.
思路:题目大意就是1号喜欢2号,2号喜欢3号,3号喜欢1号,如何去表示呢?用数组来下标来表示,例如a[1]=2,表示1号喜欢2号,同理a[2] = 3,表示2号喜欢3号,a[3] = 1,表示3号喜欢1号。现在的遇到的困难是,如何去表示这三者的关系。请先看AC代码:
#include<iostream> using namespace std; int n,a[5001]; int main() { while(cin >> n) { int flag = 0;//设一个标记 for(int i = 1;i <= n;i++) cin >> a[i]; for(int i = 1;i <= n;i++) if(a[a[a[i]]] == i)//只要有满足条件的马上跳出循环,立刻结束 flag = 1; if(flag == 1) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }
a[1]=2,a[2]=3,a[3]=1,这是一组满足条件的三角恋关系,我们拿这个例子来分析。a[1]=2说明1号喜欢2号,我们马上判断2号喜欢的是谁,我们想要知道2号喜欢谁,把a[1]=2(1号喜欢2号)中的2号放入数组a中,即a[a[1]],因为a[1]=2,a[a[1]]等价于a[2],这表示的是2号喜欢的是谁,同理,a[2]=3,如何表示3号喜欢谁呢?再把a[a[1]]放入数组a中,即a[a[a[1]]](即为3号喜欢的是谁),判断3号是否喜欢1号,如果是,则三者满足三角恋的条件,否则不满足,继续判断。好好理解下,理解后就不难了。
原文:https://www.cnblogs.com/biaobiao88/p/11846203.html