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

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

믹싱 볼 (큰 입력)

시간 제한5초메모리 제한512 MB

요약
각 혼합물의 재료가 다른 혼합물인 레시피가 주어질 때, 요리를 만들기 위해 필요한 최소 그릇 수를 구한다.
난이도

보통10점 중 7점

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

문제

점심으로 먹을 요리를 레시피대로 만든다.

레시피는 볼 하나에 재료를 함께 넣고 섞어 만드는 혼합물이다. 각 재료는 다음 둘 중 하나다.

  • 먼저 다른 볼에서 따로 만들어야 하는 또 다른 혼합물
  • 부엌에 이미 있어서 바로 넣을 수 있는 기본 재료

혼합물을 만들려면 재료를 모두 준비한 다음 빈 볼을 하나 가져와 그 안에서 섞는다. 이미 혼합물이 들어 있는 볼에 재료를 더 넣어 새 혼합물을 만들 수는 없다.

예를 들어 혼합물 CAKEMIX와 기본 재료 lies로 혼합물 CAKE를 만든다면, 먼저 CAKEMIX를 자기 볼에서 만들고, 두 번째 볼에 CAKEMIX와 lies를 넣어 CAKE를 만들어야 한다.

어떤 혼합물을 재료로 써서 그 혼합물이 담겨 있던 볼을 비우면, 그 볼은 다른 혼합물을 만드는 데 다시 쓸 수 있다. 그래서 레시피를 완성하는 데 필요한 볼의 개수는 혼합물을 만드는 순서에 따라 달라진다.

필요한 볼의 최소 개수를 구하라.

입력

첫 줄에 테스트 케이스의 개수 CC가 주어진다.

각 테스트 케이스는 다음 형식이다.

  • 첫 줄에 그 테스트 케이스의 혼합물 개수 NN.
  • 다음 NN개 줄에 혼합물을 하나씩. 각 줄은 혼합물의 이름, 그 혼합물의 재료 개수 MM, 재료 MM개의 이름으로 이루어진다.

한 줄 안의 토큰은 공백 하나로 구분된다.

각 테스트 케이스에서 첫 번째로 주어진 혼합물이 만들려는 레시피다.

혼합물의 이름은 길이가 1 이상 20 이하인 대문자 알파벳 문자열이고, 기본 재료의 이름은 길이가 1 이상 20 이하인 소문자 알파벳 문자열이다.

레시피를 뺀 모든 혼합물은 다른 혼합물 정확히 하나에서 재료로 쓰이고, 레시피는 어떤 혼합물에도 쓰이지 않는다. 한 혼합물의 재료 목록에 같은 이름이 두 번 나오지는 않는다. 어떤 혼합물도 직접 또는 간접으로 자기 자신을 재료로 요구하지 않는다.

제한

  • 1≤C≤101 \le C \le 10
  • 1≤N≤10001 \le N \le 1000
  • 2≤M≤102 \le M \le 10

출력

각 테스트 케이스마다 Case #X: Y 형식으로 한 줄을 출력한다. XX는 1부터 시작하는 테스트 케이스 번호이고, YY는 필요한 믹싱 볼의 최소 개수다.

힌트

예제 입력의 첫 번째 테스트 케이스에서 SOUP를 만드는 순서는 이렇다.

  1. 볼 하나에 celery와 onions를 섞어 VEGETABLES를 만든다.
  2. 두 번째 볼에 chicken과 첫 번째 볼의 VEGETABLES를 섞어 STOCK을 만든다. 첫 번째 볼이 빈다.
  3. 빈 첫 번째 볼에 STOCK, salt, water를 섞어 SOUP를 만든다.

두 번째 테스트 케이스에서는 FLAVOR와 FRUIT 중 어느 쪽을 먼저 만들지 고를 수 있다. 그 둘을 milk, icecream과 섞으면 MILKSHAKE가 된다.

FRUIT를 먼저 만들면 볼 네 개를 쓴다.

  1. 볼 하나에 banana와 berries를 섞어 FRUIT를 만든다.
  2. 두 번째 볼에 nutmeg와 cinnamon을 섞어 SPICES를, 세 번째 볼에 cocoa와 syrup을 섞어 CHOCOLATE을 만든다. 두 순서는 상관없다.
  3. 네 번째 볼에 SPICES와 CHOCOLATE을 섞어 FLAVOR를 만든다.
  4. 비어 있는 두 번째 또는 세 번째 볼에 FRUIT, FLAVOR, milk, icecream을 섞어 MILKSHAKE를 만든다.

FRUIT를 FLAVOR보다 나중에 만들면 볼 세 개로 끝난다.

  1. 볼 하나에 nutmeg와 cinnamon을 섞어 SPICES를, 두 번째 볼에 cocoa와 syrup을 섞어 CHOCOLATE을 만든다. 두 순서는 상관없다.
  2. 세 번째 볼에 SPICES와 CHOCOLATE을 섞어 FLAVOR를 만든다.
  3. 비어 있는 첫 번째 볼에 banana와 berries를 섞어 FRUIT를 만든다.
  4. 비어 있는 두 번째 볼에 FRUIT, FLAVOR, milk, icecream을 섞어 MILKSHAKE를 만든다.

예제3

  1. 예제 1

    입력
    2
    3
    SOUP 3 STOCK salt water
    STOCK 2 chicken VEGETABLES
    VEGETABLES 2 celery onions
    5
    MILKSHAKE 4 milk icecream FLAVOR FRUIT
    FRUIT 2 banana berries
    FLAVOR 2 SPICES CHOCOLATE
    SPICES 2 nutmeg cinnamon
    CHOCOLATE 2 cocoa syrup
    
    예상 출력
    Case #1: 2
    Case #2: 3
    
  2. 예제 2

    입력
    1
    1
    A 2 inga ingb
    
    예상 출력
    Case #1: 1
    
  3. 예제 3

    입력
    2
    6
    PA 2 PB inga
    PB 2 PC ingb
    PC 2 PD ingc
    PD 2 PE ingd
    PE 2 PF inge
    PF 2 ingf ingg
    3
    QA 2 QB QC
    QB 2 inga ingb
    QC 2 ingc ingd
    
    예상 출력
    Case #1: 2
    Case #2: 3