zoukankan      html  css  js  c++  java
  • #1518 : 最大集合

    描述

    给定一个1-N的排列A[1], A[2], ... A[N],定义集合S[K] = {A[K], A[A[K]], A[A[A[K]]] ... }。  

    显然对于任意的K=1..N,S[K]都是有限集合。  

    你能求出其中包含整数最多的S[K]的大小吗?

    输入

    第一行包含一个整数N。(1 <= N <= 100000)  

    第二行包含N个两两不同的整数,A[1], A[2], ... A[N]。(1 <= A[i] <= N)

    输出

    最大的S[K]的大小。

    样例输入
    7  
    6 5 1 4 2 7 3
    样例输出
    4
    思路:好蠢啊,暴力就可以,但是有些情况可以不计算,因为如果我这个点在之前已经走过的话,那个数肯定比当前点多
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int a[100005];
     5 int b[100005];
     6 
     7 int main(){
     8     int n;
     9     scanf("%d",&n);
    10     int j,x,Max=0,sum;
    11     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    12     for(int i=1;i<=n;i++){
    13       if(!b[i]){
    14         j=i;
    15         sum=0;
    16         while(1){
    17             x=a[j];
    18             if(b[x]) break;
    19             sum++;
    20             j=a[j];
    21             b[x]=1;
    22         }
    23       }
    24         
    25      
    26         Max=max(Max,sum);
    27     }
    28     cout<<Max<<endl;
    29 }
  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
  • 原文地址:https://www.cnblogs.com/hhxj/p/7019661.html
Copyright © 2011-2022 走看看