Lorenzo Von Matterhorn
Nộp bài giải
Điểm:
4,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Đầu vào:
stdin
Đầu ra:
stdout
Dạng bài
Ngôn ngữ cho phép
Ada, Algol, Assembly, Awk, C, C#, C++, D, Dart, Forth, Fortran, Go, Groovy, Java, Javascript, Kotlin, Lisp, Lua, Nim, ObjC, Pascal, Perl, PHP, Pike, Python, Racket, Ruby, Rust, Scheme, Scratch, Sed, TCL, Typescript, V, Zig
Xét một cây nhị phân vô hạn với các đỉnh được đánh số bằng số nguyên dương bắt đầu từ . Với mỗi số nguyên dương , tồn tại một cạnh hai chiều giữa đỉnh và đỉnh , và một cạnh hai chiều giữa đỉnh và đỉnh . Giữa hai đỉnh bất kì, đường đi ngắn nhất là duy nhất.
Ban đầu mọi cạnh có phí qua đường bằng . Bạn cần xử lý sự kiện theo thứ tự, mỗi sự kiện thuộc một trong hai loại:
- Loại 1: Cho ba số nguyên , , . Phí qua đường của mọi cạnh trên đường đi ngắn nhất giữa và tăng thêm .
- Loại 2: Cho hai số nguyên , . Hãy tính tổng phí qua đường của mọi cạnh trên đường đi ngắn nhất giữa và .
Dữ liệu vào
- Dòng đầu chứa một số nguyên — số sự kiện.
- dòng tiếp theo mô tả các sự kiện theo thứ tự. Mỗi dòng bắt đầu bằng loại sự kiện:
1 v u wcho sự kiện loại 1.2 v ucho sự kiện loại 2.
Dữ liệu ra
Với mỗi sự kiện loại 2, in ra một dòng chứa tổng phí cần trả.
Ràng buộc
- ,
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 7 1 3 4 30 1 4 1 2 1 3 6 8 2 4 3 1 6 1 40 2 3 7 2 2 4 |
94 0 32 |
Sau ba sự kiện loại 1 đầu tiên, đường đi từ đến gồm các cạnh , , với phí lần lượt , , , tổng . Đường không chia sẻ cạnh nào đã tăng phí nên trả . Sau sự kiện loại 1 thứ tư, đường chỉ gồm cạnh với phí . |
| 2 1 4294967298 4294967299 10 2 2 3 |
0 | Đường giữa và không đi qua các cạnh hay , nên truy vấn cuối trả . |
Bình luận