아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

오래된 돌 게임

시간 제한1초메모리 제한128 MB

요약
일반 트리 최대 10개에 대해, 모든 자식이 돌을 하나씩 가질 때 부모로 합치는 규칙을 지키며 뿌리에 돌을 놓는 데 처음 필요한 최소 돌 개수를 구한다.
난이도

보통10점 중 7점

유형
트리, 그리디, 정렬, 동적 계획법
정답자
아직 제출이 없습니다

문제

임의의 일반 트리 TT 위에서 진행되는 오래된 돌 게임이 있다. 게임의 목표는 다음 규칙을 지키면서 트리 TT의 루트에 돌 하나를 올려놓는 것이다.

  1. 게임을 시작할 때, 플레이어는 돌 KK개를 골라 하나의 통에 모두 넣는다.
  2. 매 단계마다, 플레이어는 통에서 돌 하나를 꺼내 비어 있는 임의의 잎(leaf) 노드에 올려놓을 수 있다.
  3. 어떤 노드 pp의 직속 자식 rr개가 각각 돌 하나씩을 가지고 있으면, 플레이어는 이 rr개의 돌을 모두 치우고 그중 하나를 pp에 올려놓을 수 있다. 나머지 r−1r-1개의 돌은 다시 통에 넣어 이후 단계에서 사용할 수 있다.

위 규칙을 따라 루트에 돌 하나를 올려놓는 데 성공하면 플레이어가 이긴다.

주어진 트리에서 플레이어가 게임을 이길 수 있도록, 게임 시작 시 골라야 하는 돌의 최소 개수 KK를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 트리를 담고 있다. 첫 번째 줄에는 트리의 개수 MM이 주어진다 (1≤M≤101 \le M \le 10). 이어서 MM개의 트리에 대한 설명이 차례로 주어진다. 각 트리의 노드 수는 N<200N < 200이며, 노드에는 1,2,…,N1, 2, \dots, N의 번호가 붙어 있다. 각 노드는 임의의 개수의 자식을 가질 수 있고, 루트의 번호는 항상 11이다. 각 트리의 설명은 별도의 줄에 놓인 NN으로 시작한다. 이어지는 NN개의 줄은 노드 번호 순서대로 각 노드의 자식을 설명하며, 각 줄은 노드 번호 pp (1≤p≤N1 \le p \le N), 그 노드의 직속 자식 수 rr, 그리고 그 rr개 자식의 번호로 이루어진다.

출력

각 입력 트리마다 한 줄씩, 그 트리에서 게임을 이기기 위해 규칙 1에서 골라야 하는 돌의 최소 개수를 출력한다.

예제1

  1. 예제 1

    입력
    2
    7
    1 2 2 3
    2 2 5 4
    3 2 6 7
    4 0
    5 0
    6 0
    7 0
    12
    1 3 2 3 4
    2 0
    3 2 5 6
    4 3 7 8 9
    5 3 10 11 12
    6 0
    7 0
    8 0
    9 0
    10 0
    11 0
    12 0
    
    예상 출력
    3
    4