我也后来做了下,思路应该是没什么问题,但我这个有很多重复计算。楼上的那个比我好 from collections import defaultdict n,m,d = map(int,input().split()) spec = [int(c) for c in input().split()] lis = [int(c) for c in input().split()] # nei为节点邻接表 neighbor = defaultdict(list) for i in range(n-1):     neighbor[i+2].append(lis[i])     neighbor[lis[i]].append(i+2) def bfs(node0):     queue=[]     visited=set()     queue.append(node0)     visited.add(node0)     dis=[0 for _ in range(n+1)]     step=0     while queue:         node=queue.pop()         step+=1         for each in neighbor[node]:             if each not in visited:                 queue.append(each)                 visited.add(each)                 dis[each]=step             #print(queue)     return dis count=0 for i in range(1,n+1):     dis=0     for point in spec:         dis=max(bfs(point)[i],dis)     if dis<=d:         count+=1 print(count)   
点赞 评论

相关推荐

07-23 11:23
门头沟学院 Java
点赞 评论 收藏
分享
06-12 10:50
携程_java
小新ai:我还以为验证码呢,有零有整的
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务