canuc80k6700·1/20

Điểm Cân Bằng

Nộp bài trên LQDOJ

Bài 6.8 · Centroid Decomposition

Một mạng đường có trạm và đúng 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 , hãy tưởng tượng ta bỏ 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 gọi là điểm cân bằng nếu không thành phần nào chứa quá 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 .
  • Mỗi dòng trong dòng tiếp theo chứa hai số nguyên 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

  • .
  • và .
  • Các cạnh tạo thành một cây vô hướng.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( 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 , ba thành phần còn lại lần lượt có và đỉnh; tất cả đều không vượt . Vì vậy 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.
  • Độ phức tạp: Thời gian O(n), bộ nhớ O(n).