#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

dfs搜索,维护最大值。好久之前做的,发个博客保存起来。

代码:

#include

using namespace std;
int a[110000];
int v[110000];
int ma;
void dfs(int i,int ans,int fa)
{
    ans++;
    if(i==fa&&ans!=0)return;
    if(!v[i])
    {
        v[i]=1;
        dfs(a[i],ans,fa);
    }
    if(ma



你可能感兴趣的:(hihocode,搜索)