canuc80k3605·6/50

Khoảng Cách Và Đỉnh Thứ K

Nộp bài trên LQDOJ

Bài 36 · Lowest Common Ancestor

Cho một cây gồm đỉnh, đánh số từ đến . Mỗi cạnh có một trọng số nguyên dương. Với hai đỉnh , đường đi duy nhất từ tới được xét theo đúng hướng bắt đầu ở và kết thúc ở .

Cần xử lý truy vấn thuộc một trong hai loại:

  • : tính tổng trọng số các cạnh trên đường đi từ tới ;
  • : liệt kê các đỉnh trên đường đi từ tới theo thứ tự gặp được, đánh số từ , rồi tìm đỉnh ở vị trí .

Nếu , đường đi không chứa cạnh nào, nên truy vấn loại có kết quả bằng ; truy vấn loại khi đó chỉ có thể có .

Input

  • Dòng đầu chứa số nguyên .
  • dòng tiếp theo, mỗi dòng chứa ba số nguyên : có một cạnh nối với và cạnh đó có trọng số .
  • Dòng tiếp theo chứa số nguyên .
  • Mỗi trong dòng cuối có một trong hai dạng:
  • ;
  • .

Output

  • Với mỗi truy vấn, in kết quả tương ứng trên một dòng.

Constraints

  • .
  • .
  • ; trên mỗi cạnh.
  • .
  • cạnh tạo thành một cây.
  • Với truy vấn loại .
  • Input chỉ chứa một test case.

Scoring

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

Example

Test 1

Input

8
1 2 4
1 3 7
2 4 3
2 5 6
3 6 5
6 7 2
6 8 9
7
1 4 7
2 4 7 1
2 4 7 3
2 4 7 6
2 7 5 3
1 8 5
2 6 6 1

Output

21
4
1
7
3
31
6

Giải thích: Đường là , có tổng trọng số ; các vị trí lần lượt chứa . Đường có tổng trọng số .

Lời giải tóm tắt
  • Ý tưởng: Chọn đỉnh làm gốc. Ta tiền xử lý độ sâu, tổng trọng số từ gốc và bảng up[j][v], trong đó up[j][v] là tổ tiên cách đúng cạnh.
  • Ý tưởng: Với , tổng trọng số đường đi là
  • Ý tưởng:
  • Ý tưởng: Đối với truy vấn vị trí, số đỉnh trên đoạn từ tới , kể cả hai đầu, là left = depth[u] - depth[w] + 1. Nếu , đáp án là tổ tiên cách đúng cạnh. Nếu không, gọi total là tổng số đỉnh trên toàn đường; nhìn ngược từ , vị trí cần tìm cách đúng total-k cạnh. Hai trường hợp phủ đúng hai đoạn do LCA chia ra.
  • Ý tưởng: Tiền xử lý tốn ; mỗi truy vấn tốn ; bộ nhớ .