스패닝 트리가 K개인 가장 작은 그래프

이동과 부착 연산으로 만든 그래프의 생성 트리 수가 K가 될 때, 노드 수의 최솟값을 구한다. K는 10000 이하이다.

어려움8그래프동적 계획법정수론수학아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

무방향 그래프의 스패닝 트리는 그래프의 간선만 사용하면서 모든 정점을 포함하는 트리이고, 간선 수는 정점 수보다 1 작다. 사용한 간선 집합이 다르면 서로 다른 스패닝 트리로 센다.

스패닝 트리가 정확히 KK개인 그래프를 정점을 최대한 적게 써서 만들려고 한다. 단, 아래 과정으로 만든 그래프만 인정한다.

정점이 하나뿐인 그래프에서 시작한다. 이 정점이 중심 cc이면서 끝점 tt이다. 여기에 다음 두 연산을 원하는 순서로 원하는 횟수만큼 적용한다.

  • 옮기기: 중심을 현재 끝점으로 바꾼다. 즉 ctc \leftarrow t로 두고, 정점과 간선은 늘지 않는다.
  • 잇기: 양의 정수 aabb를 고른다. cctt가 같은 정점이면 a+b3a + b \ge 3이어야 한다. 새 정점 x1,x2,,xa+b1x_1, x_2, \ldots, x_{a+b-1}을 만들고 간선 (t,x1),(x1,x2),,(xa+b2,xa+b1),(xa+b1,c)(t, x_1), (x_1, x_2), \ldots, (x_{a+b-2}, x_{a+b-1}), (x_{a+b-1}, c)를 추가한다. 그 다음 txat \leftarrow x_a로 둔다.

잇기는 끝점에서 출발해 중심으로 돌아오는 새 경로를 붙이고, 그 경로 위의 aa번째 새 정점을 다음 끝점으로 삼는 연산이다. 이 과정으로 만든 그래프에는 자기 자신으로 가는 간선이 없고, 같은 두 정점을 잇는 간선이 두 개 이상 생기지도 않는다.

이 과정으로 만들 수 있으면서 스패닝 트리가 정확히 KK개인 그래프의 최소 정점 수를 구하라.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어지는 TT개의 줄에 정수 KK가 한 줄에 하나씩 주어진다.

  • 1T3001 \le T \le 300
  • 3K100003 \le K \le 10000

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 최소 정점 수이다.

주어진 범위의 모든 KK에 답이 존재하고, 그 값은 항상 22 이하이다.

설명

첫 잇기에서는 cctt가 같은 정점이므로 길이 a+ba + b인 사이클이 생긴다. 사이클의 스패닝 트리 개수는 간선 수와 같으므로 a+ba + b개다. K=3K = 3이면 삼각형 하나로 충분하고 답은 3이다.

K=8K = 8이면 먼저 a=1a = 1, b=2b = 2로 삼각형을 만든 뒤, a=1a = 1, b=1b = 1로 잇기를 한 번 더 적용한다. 정점 4개와 간선 5개짜리 그래프가 되고 스패닝 트리는 8개다.

옮기기를 적용하면 그 뒤에 붙는 부분이 앞서 만든 부분과 정점 하나만 공유한다. 이때 전체 스패닝 트리 개수는 두 부분의 스패닝 트리 개수의 곱이다. 정점 하나를 공유하는 삼각형 두 개는 정점이 5개이고 스패닝 트리가 9개다.