만드는 중입니다

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

두 트리

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

요약
루트가 서로 다른 두 k-서브트리가 자식 순서까지 같은 트리가 되는 가장 큰 k를 구합니다.
난이도

어려움10점 중 8점

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

문제

루트가 있는 트리를 생각해 보자. 정점 vv의 서브트리에 vv로부터 거리가 정확히 kk인 정점이 적어도 하나 있다고 하자. vv를 루트로 하는 서브트리에서 vv로부터 거리가 kk보다 큰 정점을 모두 제거하여 얻은 트리를 루트 vv의 kk-서브트리라고 부른다. 아래 그림은 정점 3의 2-서브트리를 빨간색으로 표시한 것이다.

한 트리의 정점 번호를 다시 붙여서 다른 트리와 같아질 수 있으면 두 서브트리가 같다고 한다. 정점의 자식 순서는 바꿀 수 없다. 예를 들어 아래 두 트리는 같지 않다.

루트가 서로 다른 두 kk-서브트리가 같도록 하는 가장 큰 kk를 구하라. 두 서브트리는 정점을 공유해도 된다.

그림은 예제 테스트의 트리를 보여 준다.

첫 번째 예시에서는 루트가 2와 3인 1-서브트리가 같다. 두 번째 예시에서는 루트가 1과 4인 3-서브트리가 같다. 세 번째 예시에서는 루트가 1과 2인 0-서브트리가 같다.

입력

첫 줄에 테스트 케이스의 개수 tt가 주어진다 (1≤t≤1041 \le t \le 10^4). 각 테스트 케이스의 첫 줄에는 정점의 개수 nn이 주어진다 (2≤n≤1052 \le n \le 10^5). 이후 nn개의 줄이 정점을 하나씩 설명한다. ii번째 줄은 정점 ii의 자식 수 cnticnt_i와, 그 뒤에 자식들의 번호를 순서대로 담고 있다. 정점은 1번부터 번호가 붙고 루트는 1번 정점이다. 입력은 1을 루트로 하는 올바른 트리임이 보장된다. 모든 테스트 케이스의 nn을 합하면 2⋅1052 \cdot 10^5을 넘지 않는다.

출력

각 테스트 케이스마다 루트가 서로 다른 두 개의 같은 kk-서브트리가 존재하는 최대의 kk를 한 줄에 출력한다.

예제1

  1. 예제 1

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