西南民族大学第十届校赛(同步赛)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;
} 

猜你喜欢

转载自blog.csdn.net/qq_41593380/article/details/86177600
今日推荐