Có N đỉnh được đánh số từ 0 đến N−1. Từ mỗi đỉnh i có đúng một cạnh đi tới đỉnh fi; trọng số của cạnh này là wi.
Với từng đỉnh xuất phát s, hãy đi theo đúng K cạnh liên tiếp. Cần tính tổng trọng số của K cạnh đã đi và trọng số nhỏ nhất trong số các cạnh đó.
Input
Dòng đầu chứa N và K.
Dòng thứ hai chứa N số f0,f1,…,fN−1.
Dòng thứ ba chứa N số w0,w1,…,wN−1; wi là trọng số cạnh i→fi.
Output
In N dòng; dòng ứng với đỉnh i gồm tổng trọng số và trọng số nhỏ nhất trên hành trình dài K cạnh bắt đầu từ i.
Constraints
1≤N≤105.
1≤K≤1010.
0≤fi<N.
0≤wi≤108.
Scoring
Subtask 1 (50% số điểm): N≤2000 và K≤2000.
Subtask 2 (50% 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 0, bốn cạnh có trọng số 5,1,7,5 nên tổng là 18 và nhỏ nhất là 1. Đỉnh 4 tự nối với chính nó, vì vậy kết quả là 4⋅9=36 và 9.
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.