A.Party
Hint
Try to think in a level order manner
Solution
We can notice that the Level of the Employee matters for it to have dinner with the others. Which is basically his level in the graph which decides this. So what we can do is to construct the graph with keeping track of the indegree of the node and doing BFS starting from the nodes which have 0 indegree because they are the top level managers and collecting all of them who have the same level to one place.
Spoiler
import heapq, math
from itertools import *
from bisect import *
from collections import *
from sys import stdin, stdout
def pr(out):
return stdout.write(f"{out}\n")
def input():
return stdin.readline().rstrip()
def int_inp():
return int(input())
def inp_int_l():
return list(map(int, stdin.readline().split()))
def inp_l():
return stdin.readline().split()
def solve():
n = int(input())
graph = [[] for _ in range(n)]
indegree = [0] * n
for node in range(n):
p = int_inp()
if p != -1:
graph[p - 1].append(node)
indegree[node] += 1
level = [[node for node in range(n) if indegree[node] == 0]]
queue = deque(level[0])
while queue:
lev = []
for _ in range(len(queue)):
node = queue.popleft()
for nei in graph[node]:
lev.append(nei)
queue.append(nei)
level.append(lev)
count = 0
for l in level:
if l:
count += 1
print(count)
if __name__ == "__main__":
t = 1
for _ in range(t):
solve()