canuc80k5803·4/50

Cạnh Lớn Nhất Trên Đường

Nộp bài trên LQDOJ

Bài 58 · Heavy Light Decomposition

Có bộ dữ liệu. Mỗi bộ là một cây đỉnh, các cạnh được đánh số theo thứ tự nhập và có trọng số dương. Sau đó là một chuỗi lệnh:

  • : in trọng số lớn nhất trong các cạnh trên đường từ đến ;
  • : đổi trọng số cạnh số thành ;
  • DONE: kết thúc bộ dữ liệu.

Khi , đường không có cạnh và kết quả là .

Input

  • Dòng đầu chứa . Mỗi bộ bắt đầu bằng , tiếp theo là dòng , rồi các lệnh cho đến DONE.

Output

  • In một dòng cho mỗi lệnh .

Constraints

  • .
  • ; mỗi bộ có không quá lệnh trước DONE.
  • Các cạnh tạo thành một cây.

Scoring

  • Subtask (): và số lệnh không quá . Subtask : không giới hạn thêm.

Example

Test 1

Input

1
5
1 2 4
1 3 7
3 4 2
3 5 6
QUERY 2 4
CHANGE 2 1
QUERY 2 4
CHANGE 3 9
QUERY 4 5
QUERY 1 1
DONE

Output

7
4
9
0

Giải thích: Truy vấn đầu gặp cạnh trọng số . Sau khi cạnh số đổi thành , cực đại trên cùng đường là ; đổi cạnh số thành làm đường có cực đại , còn đường từ đến chính nó không có cạnh.

Lời giải tóm tắt
  • Ý tưởng: Gốc cây tại 1. Lưu trọng số cạnh (parent[v],v) ở vị trí HLD của v. CHANGE trở thành gán một điểm. Khi hỏi đường, lấy cực đại trên các đoạn HLD; ở đoạn cuối phải bỏ vị trí của LCA vì vị trí đó đại diện cạnh đi lên khỏi LCA. Độ phức tạp O(log^2 n) mỗi lệnh.