CF1535E.Gold Transfer
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given a rooted tree. Each vertex contains ai tons of gold, which costs ci per one ton. Initially, the tree consists only a root numbered 0 with a0 tons of gold and price c0 per ton.
There are q queries. Each query has one of two types:
- Add vertex i (where i is an index of query) as a son to some vertex pi ; vertex i will have ai tons of gold with ci per ton. It's guaranteed that ci>cpi .
- For a given vertex vi consider the simple path from vi to the root. We need to purchase wi tons of gold from vertices on this path, spending the minimum amount of money. If there isn't enough gold on the path, we buy all we can.
If we buy x tons of gold in some vertex v the remaining amount of gold in it decreases by x (of course, we can't buy more gold that vertex has at the moment). For each query of the second type, calculate the resulting amount of gold we bought and the amount of money we should spend.
Note that you should solve the problem in online mode. It means that you can't read the whole input at once. You can read each query only after writing the answer for the last query, so don't forget to flush output after printing answers. You can use functions like fflush(stdout) in C++ and BufferedWriter.flush in Java or similar after each writing in your program. In standard (if you don't tweak I/O), endl flushes cout in C++ and System.out.println in Java (or println in Kotlin) makes automatic flush as well.
输入格式
The first line contains three integers q , a0 and c0 ( 1≤q≤3⋅105 ; 1≤a0,c0<106 ) — the number of queries, the amount of gold in the root and its price.
Next q lines contain descriptions of queries; The i -th query has one of two types:
- " 1 pi ai ci " ( 0≤pi<i ; 1≤ai,ci<106 ): add vertex i as a son to vertex pi . The vertex i will have ai tons of gold with price ci per one ton. It's guaranteed that pi exists and ci>cpi .
- " 2 vi wi " ( 0≤vi<i ; 1≤wi<106 ): buy wi tons of gold from vertices on path from vi to 0 spending the minimum amount of money. If there isn't enough gold, we buy as much as we can. It's guaranteed that vertex vi exist.
It's guaranteed that there is at least one query of the second type.
输出格式
For each query of the second type, print the resulting amount of gold we bought and the minimum amount of money we should spend.
输入输出样例
输入#1
5 5 2 2 0 2 1 0 3 4 2 2 4 1 0 1 3 2 4 2
输出#1
2 4 4 10 1 3
说明/提示
Explanation of the sample:
At the first query, the tree consist of root, so we purchase 2 tons of gold and pay 2⋅2=4 . 3 tons remain in the root.
At the second query, we add vertex 2 as a son of vertex 0 . Vertex 2 now has 3 tons of gold with price 4 per one ton.
At the third query, a path from 2 to 0 consists of only vertices 0 and 2 and since c0<c2 we buy 3 remaining tons of gold in vertex 0 and 1 ton in vertex 2 . So we bought 3+1=4 tons and paid 3⋅2+1⋅4=10 . Now, in vertex 0 no gold left and 2 tons of gold remain in vertex 2 .
At the fourth query, we add vertex 4 as a son of vertex 0 . Vertex 4 now has 1 ton of gold with price 3 .
At the fifth query, a path from 4 to 0 consists of only vertices 0 and 4 . But since no gold left in vertex 0 and only 1 ton is in vertex 4 , we buy 1 ton of gold in vertex 4 and spend 1⋅3=3 . Now, in vertex 4 no gold left.