西南民族大学第十届校赛(同步赛)D
链接:https://ac.nowcoder.com/acm/contest/322/D
来源:牛客网
题目描述
一天小A在金色的银杏树下向他喜欢的小姐姐B表白了,“对不起,我喜欢的是C”,B这样说道,小A尴尬的笑了笑转身离开了。他心里默默说着“对不起,C喜欢我。”(233333333)
Love triangle被定义为:如果A喜欢B,B喜欢C,C喜欢A则称为Love triangle。现在让你寻找有没有Love triangle。
输入描述:
第一行一个正整数N(n<=5000),第二行n个数X1,X2,X3……Xn代表i喜欢Xi。
输出描述:
如果存在Love triangle则输出YES,没有则输出NO。
示例1
输入
5 2 4 5 1 3
输出
YES
思路:先用map将它的值与下标一一对应存一下。
然后就根据下标去判断他们得值是否相等 , 就三个数。
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int vis[5006];
int main()
{
int n, x , flag = 0;
map<int , int> M;
memset(vis , 0 , sizeof(vis));
scanf("%d" , &n);
for(int i = 1 ; i <= n ; i++)
{
scanf("%d" , &x);
vis[x] = i;
M[i] = x;
}
for(int i = 1 ;i <= n ; i++)
{
int t = M[i];
int p = M[t];
int z = M[p];
if(z == i)
{
flag = 1;
printf("YES\n");
break;
}
}
if(flag == 0)
{
printf("NO\n");
}
return 0;
}