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

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

Rikka with Tree Game

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

요약
루트가 있는 트리에서 두 사람이 번갈아 토큰을 자식으로 옮기고 점수는 마지막 깊이가 될 때, 잎에 새 노드를 붙이는 연산을 반복해 최적 점수가 정확히 k가 되게 하는 최소 연산 수 f(k)의 극한 f(k)/k를 구한다.
난이도

어려움10점 중 9점

유형
게임 이론, 트리, 그리디, 수학
정답자
아직 제출이 없습니다

문제

게임 이론은 컴퓨터 과학의 중요한 분야다. 컴퓨터 과학을 전공하는 대학생에게 게임을 하는 일이 항상 즐거운 과정은 아닐 수 있다.

오늘 Rikka는 트리를 사용한 단순하지만 흥미로운 게임을 연구한다.

루트가 있는 트리 TT를 생각하자. 처음에는 루트에 토큰이 하나 있다. 두 플레이어가 이 트리에서 번갈아 토큰을 움직이며 게임을 한다. 각 차례에 토큰이 정점 ii에 있다면, 플레이어는 ii의 자식 jj를 하나 골라 토큰을 jj로 옮긴다. ii에 자식이 없으면 게임은 즉시 끝난다.

게임의 최종 점수는 토큰이 멈춘 최종 위치의 깊이다. 루트의 깊이는 11이고, 나머지 정점의 깊이는 부모의 깊이에 11을 더한 값이다. 선공 플레이어는 점수를 최대화하려 하고, 후공 플레이어는 점수를 최소화하려 한다. 두 플레이어 모두 최적으로 플레이한다고 가정한다.

루트가 있는 트리 TT가 주어졌을 때 게임의 최종 점수를 계산하는 것은 간단한 일이다. 그래서 Rikka는 더 어려운 문제를 풀려고 한다. 그녀는 트리에 몇 가지 연산을 할 수 있다. 매번 트리의 리프 ii(리프는 자식이 없는 정점이다)를 하나 골라, 정점 ii를 부모로 하는 새 노드를 트리에 연결한다.

f(k)f(k)를 두 플레이어가 최적으로 플레이할 때 게임의 최종 점수가 정확히 kk가 되도록 하는 최소 연산 횟수라고 하자. 불가능하면 f(k)f(k)를 −1-1이라고 하자. Rikka는 lim⁡k→+∞f(k)k\lim\limits_{k \rightarrow +\infty}\frac{f(k)}{k}의 값을 알고 싶어 한다.

Rikka는 질문을 잘하지만 답을 잘하지는 못한다. 그래서 그녀는 당신에게 도움을 청한다.

입력

첫 번째 줄에는 정수 tt (1≤t≤1031 \leq t \leq 10^3)가 주어진다. 이는 테스트 케이스의 수다.

각 테스트 케이스의 첫 번째 줄에는 정수 nn (1≤n≤1051 \leq n \leq 10^5)이 주어진다.

그다음 n−1n - 1개의 줄이 주어진다. 각 줄에는 트리의 간선 (u,v)(u, v)를 나타내는 두 정수 uu와 vv (1≤u,v≤n1 \leq u, v \leq n)가 주어진다. 루트의 번호는 11이다.

주어지는 그래프는 트리임이 보장된다. 또한 n>1000n > 1000인 테스트 케이스는 최대 1010개임이 보장된다.

출력

각 테스트 케이스마다 Rikka가 알고 싶어 하는 극한값을 한 줄에 정수 하나로 출력한다. (답이 존재하면 그 값은 정수임이 밝혀져 있다.) 극한이 존재하지 않으면 대신 −1-1을 출력한다.

예제1

  1. 예제 1

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