canuc80k6708·9/20

Tín Hiệu Đỏ Gần Nhất

Nộp bài trên LQDOJ

Bài 67 · Centroid Decomposition

Có trạm được nối bởi đường truyền, tạo thành một cây vô hướng. Các trạm được đánh số từ đến . Ban đầu chỉ trạm phát tín hiệu đỏ; mọi trạm khác có màu xanh.

Khoảng cách giữa hai trạm là số cạnh trên đường đi đơn duy nhất nối chúng. Hệ thống thực hiện thao tác theo thứ tự:

  • : đổi trạm từ xanh thành đỏ. Trạm đã đỏ sẽ giữ màu đỏ đến hết quá trình.
  • : tìm khoảng cách nhỏ nhất từ đến một trạm đỏ hiện tại.

Dữ liệu bảo đảm mọi thao tác loại chọn một trạm đang xanh.

Input

  • Dòng đầu chứa hai số nguyên .
  • Mỗi trong dòng tiếp theo chứa hai số nguyên , mô tả một cạnh của cây.
  • Mỗi trong dòng cuối chứa một thao tác .

Output

  • Với mỗi thao tác loại , in khoảng cách nhỏ nhất cần tìm trên một dòng.

Constraints

  • .
  • .
  • đối với mọi cạnh.
  • cạnh tạo thành một cây vô hướng.
  • và đối với mọi thao tác.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

6 7
1 2
2 3
2 4
4 5
4 6
2 5
1 4
2 5
2 3
1 3
2 6
2 3

Output

3
1
2
1
0

Giải thích: Ban đầu chỉ trạm đỏ nên trạm cách tín hiệu gần nhất cạnh. Sau khi tô đỏ lần lượt các trạm và , năm truy vấn có khoảng cách tương ứng .

Lời giải tóm tắt
  • Ý tưởng: Ta xây dựng centroid decomposition. Với mỗi đỉnh u, lưu mọi cặp (c, dist(u,c)), trong đó c là một centroid trên chuỗi tổ tiên centroid của u.
  • Ý tưởng: Tại mỗi centroid c, duy trì best[c], khoảng cách nhỏ nhất từ c tới một đỉnh đỏ đã xuất hiện.
  • Ý tưởng: Tô đỏ u: với mọi (c,d) của u, cập nhật best[c] = min(best[c], d).
  • Ý tưởng: Hỏi tại u: lấy minimum của d + best[c] qua mọi (c,d) của u.
  • Ý tưởng: Phải kích hoạt đỉnh 1 trước khi xử lý thao tác đầu tiên. Với đỉnh đỏ tối ưu r, centroid đầu tiên tách u và r nằm trên đường đi giữa hai đỉnh, nên tại centroid ấy tổng hai khoảng cách bằng đúng dist(u,r). Mọi ứng viên khác là độ dài của một đường đi thật tới một đỉnh đỏ, vì vậy minimum nhận chính xác đáp án.
  • Ý tưởng: Tiền xử lý dùng O(n log n) thời gian và bộ nhớ; mỗi thao tác dùng O(log n) thời gian.