trang chủ / bài tập / goldxfer

Chuyển vàng

Đề bài

Mô tả

Có một cây có gốc. Mỗi đỉnh chứa một lượng vàng: đỉnh iai tấn vàng với giá ci mỗi tấn. Ban đầu cây chỉ gồm một đỉnh gốc đánh số 0, chứa a0 tấn vàng giá c0 mỗi tấn.

q truy vấn, mỗi truy vấn thuộc một trong hai loại:

  1. Thêm đỉnh i (với i là chỉ số của truy vấn) làm con của đỉnh pi; đỉnh i chứa ai tấn vàng giá ci mỗi tấn. Dữ liệu đảm bảo ci>cpi.
  2. Cho đỉnh vi, xét đường đi đơn từ vi tới gốc. Ta cần mua wi tấn vàng từ các đỉnh trên đường đi này sao cho tổng số tiền phải trả là nhỏ nhất. Nếu tổng lượng vàng trên đường đi không đủ wi tấn, ta mua hết những gì có thể.

Khi mua x tấn vàng ở một đỉnh, lượng vàng còn lại của đỉnh đó giảm đi x (dĩ nhiên không thể mua nhiều hơn lượng vàng đỉnh đó đang có). Với mỗi truy vấn loại 2, hãy tính lượng vàng thực sự mua được và số tiền phải trả.

Dữ liệu vào

  • Dòng đầu chứa ba số nguyên q, a0, c0.
  • q dòng tiếp theo, dòng thứ i mô tả truy vấn thứ i:
    • "1 pi ai ci": thêm đỉnh i làm con của đỉnh pi.
    • "2 vi wi": mua wi tấn vàng trên đường đi từ vi tới gốc 0.

Dữ liệu ra

Với mỗi truy vấn loại 2, in ra một dòng gồm hai số nguyên: lượng vàng mua được và số tiền tối thiểu phải trả.

Ràng buộc

  • 1q3·105
  • 1a0,c0<106
  • Với truy vấn loại 1: 0pi<i; 1ai,ci<106; đảm bảo đỉnh pi tồn tại và ci>cpi.
  • Với truy vấn loại 2: 0vi<i; 1wi<106; đảm bảo đỉnh vi tồn tại.
  • Dữ liệu đảm bảo có ít nhất một truy vấn loại 2.

Ví dụ

Input Output Giải thích
5 5 2
2 0 2
1 0 3 4
2 2 4
1 0 1 3
2 4 2
2 4
4 10
1 3
Truy vấn 1: cây chỉ có gốc, mua 2 tấn, trả 2·2=4, gốc còn 3 tấn.
Truy vấn 3: đường đi 20 gồm đỉnh 0 (giá 2) và đỉnh 2 (giá 4). Mua 3 tấn còn lại ở đỉnh 0 và 1 tấn ở đỉnh 2: mua 3+1=4 tấn, trả 3·2+1·4=10.
Truy vấn 5: đường đi 40; gốc đã hết vàng, đỉnh 4 chỉ có 1 tấn, mua 1 tấn giá 3.
1 5 2
2 0 100
5 10 Cây chỉ có gốc với 5 tấn vàng giá 2. Yêu cầu mua 100 tấn nhưng chỉ có 5 tấn, nên mua hết 5 tấn và trả 5·2=10.

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