친척들의 상대적 나이

면접 대비

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

요약
테드의 나이 100과 각 자손의 아버지 이름 및 출생 당시 아버지 나이가 주어질 때, 모든 자손의 나이를 계산해 나이 많은 순으로, 나이가 같으면 이름 사전순으로 출력한다.
난이도

보통10점 중 4점

유형
트리, DFS, 정렬, 해시맵
정답자
아직 제출이 없습니다

문제

오늘은 Ted의 100번째 생일입니다. 몇 주 전, 가족들은 Ted의 모든 후손에게 연락해 깜짝 파티를 준비하는 일을 당신에게 맡겼습니다. 이 일을 쉽게 하려고, 당신은 Ted의 후손 전체를 나이가 많은 사람부터 순서대로 정리한 명단을 만들기로 했습니다. 나이가 같은 후손끼리는 사전 순으로 나열합니다.

당신이 가진 유일한 자료는 출생 증명서뿐입니다. 이상하게도 이 증명서에는 날짜가 적혀 있지 않습니다. 각 증명서에는 아버지의 이름, 아이의 이름, 그리고 그 아이가 태어났을 때 아버지의 정확한 나이(정수인 만 나이)만 적혀 있습니다.

Ted의 모든 후손은 Ted와 생일이 같기 때문에, 어떤 두 사람의 나이 차이도 항상 정수입니다. Ted는 오늘 100세가 되므로 Ted의 나이는 100입니다.

입력

첫 줄에는 데이터 세트의 개수를 나타내는 정수 nn이 주어집니다. 각 데이터 세트의 형식은 다음과 같습니다.

하나의 데이터 세트는 두 부분으로 구성됩니다.

  1. 후손 수 — 정수 XX (0<X<1000 < X < 100) 하나가 적힌 줄로, Ted의 후손 수를 나타냅니다.
  2. 출생 증명서 목록 — 증명서 하나당 한 줄씩 총 XX개의 줄이며, 각 줄의 형식은 FNAME CNAME FAGE입니다.
    • FNAME 은 아버지의 이름입니다.
    • CNAME 은 아이의 이름입니다.
    • FAGE 는 CNAME 이 태어난 날 아버지의 나이(정수)입니다.

참고:

  • 이름은 각 사람을 유일하게 구분하는 식별자이며, 중간에 공백이 없습니다.
  • Ted의 모든 후손은 Ted와 생일이 같으므로, 두 사람의 나이 차이는 항상 정수입니다.
  • 증명서는 빠짐없이 모두 모은 것으로, Ted의 후손마다 정확히 하나씩 존재합니다.

출력

각 데이터 세트마다 X+1X + 1개의 줄을 출력합니다. 첫 줄은 DATASET Y 이며, YY 는 첫 번째 데이터 세트에서 11, 두 번째에서 22, 이런 식으로 증가합니다. 이어지는 XX개의 줄에는 Ted의 후손 명단을 나이가 많은 사람부터 순서대로 한 줄에 한 명씩 NAME AGE 형식으로 출력합니다. 나이가 같은 후손끼리는 사전 순으로 나열합니다.

예제1

  1. 예제 1

    입력
    2
    1
    Ted Bill 25
    4
    Ray James 40
    James Beelzebub 17
    Ray Mark 75
    Ted Ray 20
    
    예상 출력
    DATASET 1
    Bill 75
    DATASET 2
    Ray 80
    James 40
    Beelzebub 23
    Mark 5