루트가 있는 트리에 검은 잎을 하나씩 붙일 때마다, 유일한 올바른 색칠을 회복하기 위해 색을 뒤집어야 하는 최소 정점 수를 구한다.
어려움8트리DFS동적 계획법그리디아직 제출이 없습니다시간 제한1초메모리 제한1024 MB카드 게임 Magic: The Gathering에는 주문을 시전하고 상쇄하는 규칙이 있다. 아래 색칠 규칙은 여기에서 따왔다. 카드 게임 자체는 설명하지 않으며, 문제를 푸는 데 알 필요도 없다.
뿌리 있는 트리마다 다음 조건을 만족하도록 정점을 검은색과 흰색으로 칠하는 방법이 정확히 하나 있다.
색칠이 유일하다는 사실은 귀납법으로 쉽게 증명할 수 있다. 이렇게 칠한 트리를 잘 칠한 트리라고 부른다.
검은색 정점 하나로 이루어진 트리에서 시작한다. 이 정점이 뿌리이다. 여기에 다음 연산을 n번 수행한다.
각 연산에서 색이 반전되는 정점이 몇 개인지 구하라.
뿌리의 번호는 0이고, 나머지 정점은 트리에 추가되는 순서대로 1,2,…,n번을 받는다.
첫째 줄에 정점을 추가하는 횟수 n이 주어진다. (1≤n≤200000)
다음 n개 줄 중 i번째 줄에는 i번째 연산에서 추가하는 정점의 부모 번호 vi가 주어진다. 정점 vi는 i번째 연산 전에 이미 존재한다. 즉, vi<i이다.
n개 줄을 출력한다. i번째 줄에는 i번째 연산에서 색이 반전되는 정점의 개수를 출력한다. 그 연산에서 새로 붙인 정점은 검은색으로 붙었고 잎은 항상 검은색이므로, 반전되는 정점에 들어가지 않는다.
아래 그림은 첫 번째 예제의 시작 트리와 각 연산을 마친 뒤의 트리이다. 그 연산에서 색이 반전된 정점을 빨간 테두리로 표시했다.
