列表

详情


NC205458. 三边形链表

描述

链表上有n个节点,编号从1到n,编号为i的节点指向编号为ki的节点,其中1 ≤ ki ≤ n和ki!=i,现在想问你,这个链表中是否存在一个三边形循环链表

输入描述

一个数字n,表示有n个节点
接下来有n个数字,表示ki

输出描述

若能形成三边形循环链表,则输出“YES”,否则输出“NO”

示例1

输入:

5
2 4 5 1 3

输出:

YES

说明:

以1为头节点的链表可以形成一个三边形循环链表,1->2->4->1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 488K, 提交时间: 2020-04-25 11:54:05

#include <iostream>
using namespace std;
 
int main(){
    int n,i,j;
    j=0;
    cin>>n;
    int a[n+1];
    for(i=1;i<=n;i++) scanf("%d",&a[i]);
    for(i=1;i<=n;i++){
        if(a[a[a[i]]]==i){
            j = 1;
            break;
        }
    }
    if(j) printf("YES\n");
    else printf("NO\n");
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 380K, 提交时间: 2022-12-05 18:38:28

#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    int a[10000];
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
     for(int i=0;i<n;i++)
    {
        if(a[a[a[i]]]==i)
        {
            printf("YES");
            return 0;
        }
    }
    printf("NO");
}

C++11(clang++ 3.9) 解法, 执行用时: 2ms, 内存消耗: 376K, 提交时间: 2020-08-15 18:34:39

#include<iostream>
using namespace std;
int main(){
int n,a[1000],i;
    cin>>n;
for(i=1;i<=n;i++)
    cin>>a[i];
for(i=1;i<=n;i++)
{
    if(a[a[a[i]]]==i) { cout<<"YES";break; }
}
if(i>n) cout<<"NO";
     return 0;
}

上一题