canuc80k3511·12/50

Thống Kê Trên Đường Chuyển

Nộp bài trên LQDOJ

Bài 35 · Binary Lifting

Có đỉnh được đánh số từ đến . Từ mỗi đỉnh có đúng một cạnh đi tới đỉnh ; trọng số của cạnh này là .

Với từng đỉnh xuất phát , hãy đi theo đúng cạnh liên tiếp. Cần tính tổng trọng số của cạnh đã đi và trọng số nhỏ nhất trong số các cạnh đó.

Input

  • Dòng đầu chứa và .
  • Dòng thứ hai chứa số .
  • Dòng thứ ba chứa số ; là trọng số cạnh .

Output

  • In dòng; dòng ứng với đỉnh gồm tổng trọng số và trọng số nhỏ nhất trên hành trình dài cạnh bắt đầu từ .

Constraints

  • .
  • .
  • .
  • .

Scoring

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

Example

Test 1

Input

5 4
1 2 0 2 4
5 1 7 3 9

Output

18 1
14 1
20 1
16 1
36 9

Giải thích: Từ đỉnh , bốn cạnh có trọng số nên tổng là và nhỏ nhất là . Đỉnh tự nối với chính nó, vì vậy kết quả là và .

Lời giải tóm tắt
  • Ý tưởng: Mức 0 tại đỉnh v lưu cạnh v → f_v, tổng w_v và giá trị nhỏ nhất w_v. Một khối dài 2^b được ghép từ hai khối dài 2^(b-1) liên tiếp; tổng dùng phép cộng và giá trị nhỏ nhất dùng phép min. Với mỗi đỉnh bắt đầu, ghép các khối tương ứng với các bit bật của K.
  • Chứng minh đúng: Quy nạp theo b cho thấy mỗi ô lưu đúng đỉnh cuối, tổng và minimum của đúng 2^b cạnh liên tiếp. Khi xử lý K, các khối được nối đúng thứ tự và không chồng lấn, do đó hai aggregate cuối bao phủ chính xác K cạnh.
  • Độ phức tạp: O(N log K) thời gian và bộ nhớ.
  • Lưu ý cài đặt: Hai lỗi trọng tâm cần tránh là: bỏ qua cạnh đầu tiên và bắt đầu thống kê từ đỉnh kế tiếp; và khi ghép hai khối lại dùng aggregate của nửa trái hai lần.