D


私信TA

用户名:ALS1111

访问量:22109

签 名:

等  级
排  名 55
经  验 11377
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

①准备工作:

    用字典存放对应小朋友编号以及他崇拜的小朋友的编号

    建立一个大小为n+1的访问数组,用来表示这个小朋友是否已经被访问过。

②从编号1~N进行遍历

    首先判断编号为i的小朋友是否已经被访问过,如果已经被访问过,则跳过进行下一轮循环。

    否则从编号为i的小朋友开始,一直找下一个小朋友的崇拜的小朋友并加入到数组T中,直到下一个小朋友已经在T中时停止。

    然后用数组T的长度减去已经在T中的那个小朋友的下标。得到的结果是否大于当前值,若大于,则更新。


注意事项:

参考代码:

from cmath import inf    
     
     
n = int(input().strip())    
A = [0] + [int(i) for i in input().strip().split()]    
B = [0 for i in range(n+1)]    
     
cnt = -inf    
for i in range(1,n+1):    
    if B[i]:    
        continue    
     
    T = []    
    T.append(i)    
    B[i] = 1    
     
    temp = A[i]    
    while temp not in T:    
        T.append(temp)    
        B[temp] = 1  
        temp = A[temp]    
         
    num = len(T)-T.index(temp)    
     
    if num > cnt:    
        cnt = num    
     
print(cnt)


 

0.0分

3 人评分

  评论区

  • «
  • »