Lorenzo Von Matterhorn

Đề bài

Mô tả

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ừ 1. Với mỗi số nguyên dương i, tồn tại một cạnh hai chiều giữa đỉnh i và đỉnh 2i, và một cạnh hai chiều giữa đỉnh i và đỉnh 2i+1. 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 0. Bạn cần xử lý q 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 v, u, w. Phí qua đường của mọi cạnh trên đường đi ngắn nhất giữa uv tăng thêm w.
  • Loại 2: Cho hai số nguyên v, u. 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 uv.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên q — số sự kiện.
  • q 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 w cho sự kiện loại 1.
    • 2 v u cho 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

  • 1q1000
  • 1v,u1018, vu
  • 1w109

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ừ 4 đến 3 gồm các cạnh 42, 21, 13 với phí lần lượt 32, 32, 30, tổng 94. Đường 37 không chia sẻ cạnh nào đã tăng phí nên trả 0. Sau sự kiện loại 1 thứ tư, đường 24 chỉ gồm cạnh 42 với phí 32.
2
1 4294967298 4294967299 10
2 2 3
0 Đường giữa 42949672984294967299 không đi qua các cạnh 12 hay 13, nên truy vấn cuối trả 0.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0