만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

트리 곱

시간 제한2초메모리 제한256 MB

요약
루트가 있는 트리 n개가 주어질 때, 트리 곱의 지름이 최대와 최소가 되는 순서를 각각 구합니다.
난이도

보통10점 중 7점

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

문제

루트가 있는 트리 T1,T2,…,TnT_1,T_2,\ldots,T_n이 nn개 주어진다. 순열 p1,p2,…,pnp_1,p_2,\dots,p_n과 q1,q2,…,qnq_1,q_2,\ldots,q_n을 구하라. Tp1×Tp2×…×TpnT_{p_1} \times T_{p_2} \times \ldots \times T_{p_n}의 지름은 최대이고, Tq1×Tq2×…×TqnT_{q_1} \times T_{q_2} \times \ldots \times T_{q_n}의 지름은 최소여야 한다.

루트가 있는 트리 AA와 BB에 대해 트리 곱 T=A×BT = A \times B는 다음과 같이 정의한다. 트리 AA를 복사한다. 그다음 AA의 각 정점 xx마다 BB의 복사본을 만들고, BB의 루트를 xx와 합친다. 예시는 아래 표를 참고하라.

트리 곱은 결합법칙을 만족한다. (A×B)×C=A×(B×C)(A \times B) \times C = A \times (B \times C)이다. 따라서 트리 3개 이상의 곱에서는 괄호를 생략할 수 있다.

다음을 기억하자.

  • 트리는 사이클이 없는 연결 그래프이다. 루트가 있는 트리에는 루트라고 부르는 특별한 정점이 하나 있다. 정점 vv의 부모는 루트에서 vv까지의 경로에서 vv와 다른 마지막 정점이다.
  • 루트가 있는 트리의 지름은 트리에서 가장 긴 단순 경로의 길이이다. 경로의 길이는 경로에 포함된 간선의 수이다.

입력

테스트 케이스는 여러 개이다. 입력의 첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에 루트가 있는 트리의 개수 nn (1≤n≤106)(1 \le n \le 10^6)이 주어진다.

이후 nn개의 줄 각각은 정수 mim_i (1≤mi≤105)(1 \le m_i \le 10^5)로 시작하며, 이는 ii번째 트리의 정점 수이다. 같은 줄에 정수 pi,1,pi,2,…,pi,mip_{i,1},p_{i,2},\ldots,p_{i,m_i} (0≤pi,j≤mi)(0 \le p_{i,j} \le m_i)가 이어서 주어지며, jj번째 값은 jj번째 정점의 부모이다. 트리의 루트는 부모로 00을 가진다.

모든 테스트 케이스에 걸쳐 mim_i의 합은 10610^6을 넘지 않는다.

출력

각 테스트 케이스마다 최대 지름과 최소 지름을 이 순서대로 두 정수로 출력한다.

힌트

첫 번째 예제에서 T1×T2×T3T_1 \times T_2 \times T_3이 최대 지름을 주고, T3×T2×T1T_3 \times T_2 \times T_1이 최소 지름을 준다.

예제1

  1. 예제 1

    입력
    2
    3
    5 0 1 2 1 4
    3 2 0 2
    2 2 0
    2
    1 0
    1 0
    
    예상 출력
    8 7
    0 0