오래된 돌 게임
시간 제한1초메모리 제한128 MB
일반 트리 최대 10개에 대해, 모든 자식이 돌을 하나씩 가질 때 부모로 합치는 규칙을 지키며 뿌리에 돌을 놓는 데 처음 필요한 최소 돌 개수를 구한다.
문제
임의의 일반 트리 위에서 진행되는 오래된 돌 게임이 있다. 게임의 목표는 다음 규칙을 지키면서 트리 의 루트에 돌 하나를 올려놓는 것이다.
- 게임을 시작할 때, 플레이어는 돌 개를 골라 하나의 통에 모두 넣는다.
- 매 단계마다, 플레이어는 통에서 돌 하나를 꺼내 비어 있는 임의의 잎(leaf) 노드에 올려놓을 수 있다.
- 어떤 노드 의 직속 자식 개가 각각 돌 하나씩을 가지고 있으면, 플레이어는 이 개의 돌을 모두 치우고 그중 하나를 에 올려놓을 수 있다. 나머지 개의 돌은 다시 통에 넣어 이후 단계에서 사용할 수 있다.
위 규칙을 따라 루트에 돌 하나를 올려놓는 데 성공하면 플레이어가 이긴다.
주어진 트리에서 플레이어가 게임을 이길 수 있도록, 게임 시작 시 골라야 하는 돌의 최소 개수 를 구하는 프로그램을 작성하시오.
입력
입력은 여러 개의 트리를 담고 있다. 첫 번째 줄에는 트리의 개수 이 주어진다 (). 이어서 개의 트리에 대한 설명이 차례로 주어진다. 각 트리의 노드 수는 이며, 노드에는 의 번호가 붙어 있다. 각 노드는 임의의 개수의 자식을 가질 수 있고, 루트의 번호는 항상 이다. 각 트리의 설명은 별도의 줄에 놓인 으로 시작한다. 이어지는 개의 줄은 노드 번호 순서대로 각 노드의 자식을 설명하며, 각 줄은 노드 번호 (), 그 노드의 직속 자식 수 , 그리고 그 개 자식의 번호로 이루어진다.
출력
각 입력 트리마다 한 줄씩, 그 트리에서 게임을 이기기 위해 규칙 1에서 골라야 하는 돌의 최소 개수를 출력한다.