- 그래프 탐색
- 입력으로 주어진 노드 중 부모가 -1인 노드가 루트 노드
1, 2번을 동시에 진행한다.
import sys
input = sys.stdin.readline
N = int(input())
# 부모 -> 자식
graph = [[] for _ in range(N)] # graph[i] -> i 번째 노드의 자식 노드들 번호 리스트
parents = list(map(int, input().split())) # 부모 노드
root_node = 0 # 루트 노드
delete_node = int(input()) # 삭제할 노드
for i in range(N):
if parents[i] == -1: # 부모 노드가 -1이면 루트 노드
root_node = i
else:
# 삭제할 노드가 아닌 경우만 부모의 자식 리스트에 추가
if i != delete_node:
graph[parents[i]].append(i)
if delete_node == root_node:
print(0)
exit(0)
순회가 끝나면 결과를 출력한다.
res = 0 # 리프노드의 개수
def dfs(node: int):
global res
# 자식이 없으면 리프노드
if len(graph[node]) == 0:
res += 1
return
# 자식 노드들을 dfs로 재귀 호출
for n in graph[node]:
dfs(n)
dfs(root_node)
print(res)
import sys
input = sys.stdin.readline
N = int(input())
# 부모 -> 자식
graph = [[] for _ in range(N)] # graph[i] -> i 번째 노드의 자식 노드들 번호 리스트
parents = list(map(int, input().split())) # 부모 노드
root_node = 0 # 루트 노드
delete_node = int(input()) # 삭제할 노드
for i in range(N):
if parents[i] == -1: # 부모 노드가 -1이면 루트 노드
root_node = i
else:
# 삭제할 노드가 아닌 경우만 부모의 자식 리스트에 추가
if i != delete_node:
graph[parents[i]].append(i)
if delete_node == root_node:
print(0)
exit(0)
res = 0
def dfs(node: int):
global res
# 자식이 없으면 리프노드
if len(graph[node]) == 0:
res += 1
return
for n in graph[node]:
dfs(n)
dfs(root_node)
print(res)