Algorithm

[백준 1068] 트리

moguogu 2024. 8. 21. 21:11

문제 

https://www.acmicpc.net/problem/1068

 

코드

import sys
from collections import deque
sys.setrecursionlimit(10**9)
def Input_Data():
    input = sys.stdin.readline
    N = int(input())
    node = list(map(int, input().split()))
    erase = int(input()) #지울 노드
    adj = [ [] * (1) for _ in range(N)]
    # 간선 저장
    for idx, v in enumerate(node):
        if v == -1 : # root 
            root = idx
        elif idx == erase: # 지울 노드의 간선은 스킵
            continue
        else: 
            adj[v].append(idx)
    return N, node, erase, adj, root

def Dfs(cur):
    global ans
    if len(adj[cur]) == 0:
        ans +=1 
        visited[cur] = 1
        return 
    for y in adj[cur]:
        if y == -1 : return 
        if visited[y] == 0: 
            visited[y] = 1
            Dfs(y)
        
N, node, erase, adj, root = Input_Data()
adj[erase] = [-1] 
visited = [0] * (N)
visited[root] = 1
ans = 0
Dfs(root)
print(ans)

'Algorithm' 카테고리의 다른 글

[백준 1504] 특정한 최단 경로  (0) 2024.09.01
[백준 6593] 상범 빌딩  (0) 2024.08.31
[백준 10026] 적록색약  (2) 2024.07.24
[백준 2578] 빙고  (0) 2024.02.10
[백준 2583] 영역 구하기  (1) 2024.02.04