Một mạng đường có n trạm và đúng n−1 tuyến nối, vì vậy giữa mọi cặp trạm chỉ có một đường đi đơn.
Với một trạm c, hãy tưởng tượng ta bỏ c cùng mọi tuyến nối trực tiếp với nó. Phần mạng còn lại có thể tách thành nhiều thành phần liên thông. Trạm c được gọi là điểm cân bằng nếu không thành phần nào chứa quá ⌊n/2⌋ trạm.
Hãy tìm một điểm cân bằng của cây đã cho.
Input
Dòng đầu chứa số nguyên n.
Mỗi dòng trong n−1 dòng tiếp theo chứa hai số nguyên u và v, cho biết có một cạnh nối hai đỉnh đó.
Output
In chỉ số của một điểm cân bằng bất kỳ.
Constraints
1≤n≤2⋅105.
1≤u,v≤n và u=v.
Các cạnh tạo thành một cây vô hướng.
Scoring
Subtask 1 (50% số điểm): n≤2000.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
7
1 2
2 3
3 4
4 5
4 6
6 7
Output
4
Giải thích: Khi bỏ đỉnh 4, ba thành phần còn lại lần lượt có 3,1 và 2 đỉnh; tất cả đều không vượt ⌊7/2⌋=3. Vì vậy 4 là một điểm cân bằng hợp lệ.
Lời giải tóm tắt
Phân tích: Ta tạm chọn đỉnh 1 làm gốc. Với một đỉnh u, sau khi bỏ u có hai loại thành phần:
Phân tích: cây con của từng con trực tiếp của u;
Phân tích: phần còn lại nằm về phía cha, có kích thước n - sz[u].
Phân tích: Do đó chỉ cần biết kích thước mọi cây con là có thể kiểm tra trực tiếp định nghĩa điểm cân bằng.
Thuật toán: 1. Duyệt cây bằng DFS lặp để xác định parent[u] và thứ tự thăm. 2. Duyệt thứ tự theo chiều ngược để tính sz[u]. 3. Với từng đỉnh u, lấy giá trị lớn nhất trong n-sz[u] và sz[v] của mọi con v. 4. In đỉnh đầu tiên mà giá trị lớn nhất không vượt n/2.
Chứng minh đúng: Khi bỏ u, mỗi cạnh từ u tới một đứa con tách ra đúng cây con của đứa con đó; mọi đỉnh còn lại thuộc cùng thành phần phía cha. Vì cây không có chu trình, không thể xuất hiện thêm loại thành phần nào.
Chứng minh đúng: Thuật toán lấy đúng kích thước lớn nhất trong tất cả các thành phần vừa mô tả. Khi điều kiện 2 * largest ≤ n đúng, mọi thành phần có kích thước không quá ⌊n/2⌋, nên đỉnh được in là điểm cân bằng. Mọi cây đều có ít nhất một centroid, vì vậy thuật toán luôn tìm được đáp án.