Codeforces 939A题水题

2019-11-12 16:00:58来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

Codeforces 939A题水题

题目链接:http://codeforces.com/problemset/problem/939/A

A. Love Triangle time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output

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 ≤ nfi ≠ 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 Copy
5
2 4 5 1 3
output Copy
YES
input Copy
5
5 5 5 5 1
output Copy
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.

思路:题目大意就是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
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:c++ 模板类,方法返回值类型是typedef出来的,或者是auto,那么

下一篇:不一样的LCA——luoguP1852跳跳棋