Orig Description
Score : 1400 points
Problem StatementWe will recursively define uninity of a tree, as follows: (Uni is a Japanese word for sea urchins.)
A tree consisting of one vertex is a tree of uninity 0.
Suppose there are zero or more trees of uninity k, and a vertex v. If a vertex is selected from each tree of uninity k and connected to v with an edge, the resulting tree is a tree of uninity k+1.
It can be shown that a tree of uninity k is also a tree of uninity k+1,k+2,..., and so forth.
You are given a tree consisting of N vertices.
The vertices of the tree are numbered 1 through N, and the i-th of the N-1 edges connects vertices a_i and b_i.
Find the minimum k such that the given tree is a tree of uninity k.
Constraints
2 ≦ N ≦ 10^5
1 ≦ a_i, b_i ≦ N(1 ≦ i ≦ N-1)
The given graph is a tree.
InputThe input is given from Standard Input in the following format:
N
a_1 b_1
:
a_{N-1} b_{N-1}
OutputPrint the minimum k such that the given tree is a tree of uninity k.
Sample Input 17
1 2
2 3
2 4
4 6
6 7
7 5
Sample Output 12
A tree of uninity 1 consisting of vertices 1, 2, 3 and 4 can be constructed from the following: a tree of uninity 0 consisting of vertex 1, a tree of uninity 0 consisting of vertex 3, a tree of uninity 0 consisting of vertex 4, and vertex 2.
A tree of uninity 1 consisting of vertices 5 and 7 can be constructed from the following: a tree of uninity 1 consisting of vertex 5, and vertex 7.
A tree of uninity 2 consisting of vertices 1, 2, 3, 4, 5, 6 and 7 can be constructed from the following: a tree of uninity 1 consisting of vertex 1, 2, 3 and 4, a tree of uninity 1 consisting of vertex 5 and 7, and vertex 6.
Sample Input 212
1 2
2 3
2 4
4 5
5 6
6 7
7 8
5 9
9 10
10 11
11 12
Sample Output 23
Extracted Specification
An integer N (2 ≤ N ≤ 10^5), representing some quantity or size.
N-1 pairs of integers, each pair representing an edge between two vertices, where each integer in the pair is between 1 and N.
### Example Input:
```
7
1 2
2 3
2 4
4 6
6 7
7 5
```
### Function Signature:
Write a function f(N, edges) that takes in the input.
def f(N: int, edges: List[Tuple[int, int]]):
'''
N: an integer
edges: a list of tuples, where each tuple contains two integers
'''
Test Case Generator
Certainly! To generate test cases for the given problem, we need to create random trees adhering to the constraints provided. Here's a test case generator for the problem:
```python
import random
def generate_tree(N):
edges = []
for i in range(2, N + 1):
edges.append((i, random.randint(1, i - 1)))
return edges
def tcgen():
N = random.randint(2, 10**5)
edges = generate_tree(N)
return N, edges
def format_test_case(N, edges):
result = []
result.append(str(N))
for a, b in edges:
result.append(f"{a} {b}")
return "\n".join(result)
# Example usage
N, edges = tcgen()
test_case = format_test_case(N, edges)
print(test_case)
```
### Explanation:
1. **generate_tree(N)**: This function generates a random tree with N vertices. It ensures the tree is connected by connecting each new node to one of the previous nodes.
2. **tcgen()**: This function generates a random number of vertices \(N\) and then calls `generate_tree(N)` to get the edges of the tree.
3. **format_test_case(N, edges)**: This function formats the generated tree into the appropriate input format specified in the problem statement.
This generator will create random trees within the given constraints, ensuring each test case is valid and adheres to the problem specifications. You can run the script to generate multiple test cases as needed for thorough testing.
Extract Arguments
def extract_arguments(fh):
N = int(fh.readline().strip())
edges = []
for _ in range(N-1):
a, b = map(int, fh.readline().strip().split())
edges.append((a, b))
return N, edges