https://www.acmicpc.net/problem/3182
#한동이는 공부가 하기 싫어!
n = int(input())
graph = [0]
result = [0]
for i in range(1, n+1):
graph.append(int(input()))
def dfs(start):
visited[start] = True
if not visited[graph[start]]:
dfs(graph[start])
for i in range(1, n+1):
visited = [False] * (n+1)
dfs(i)
result.append(visited.count(True))
print(result.index(max(result)))
어차피 한 선배당 한 명 밖에 지목을 못하기 때문에 1차원 리스트로 그래프를 만들고, dfs를 사용해서 시작점부터 어디까지 갈 수 있는지 체크를 한다음 방문한 노드의 개수를 result에 계속 append() 한다.
모든 각각의 노드에서 출발해서 갈 수 있는 노드의 개수를 result에 다 저장한 후에 result의 max값의 index를 출력한다. max값이 같은 것이 여러개인 경우 제일 작은 값을 출력하면 되기 때문에 index(max())를 사용하면 된다.