A12687 | Magic Tree
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
We have a magic tree: a rooted tree on $n$ vertices. The vertices are numbered $1$ through $n$ . Vertex $1$ is the root.
The magic tree gives us magic fruit. The fruit only grows in vertices of the tree other than the root. Each vertex contains at most one piece of fruit.
It is now day 0 and no fruit is ripe yet. Each fruit will only be ripe for a single day. For each fruit, we are given the vertex $v_j$ where it grows, the day $d_j$ on which it will be ripe, and the amount $w_j$ of magic juice we can extract from it if we harvest it when it is ripe.
The fruits have to be harvested by cutting some branches of the tree. On each day, you may cut as many branches of the tree as you like. The parts of the tree you cut off will fall to the ground and you can collect all the ripe fruits they contain. All fruits that fall to the ground when they are not ripe are discarded and no magic juice is collected from them.
Formally, on each day, you may erase some edges of the tree. Whenever you do so, the tree will split into multiple connected components. You then erase all components that do not contain the root and you harvest all ripe fruits those components contained.
Given is a description of the tree together with the locations, ripening days and juiciness of all $m$ fruits. Calculate the maximum total amount of magic juice we can harvest from the tree.
The magic tree gives us magic fruit. The fruit only grows in vertices of the tree other than the root. Each vertex contains at most one piece of fruit.
It is now day 0 and no fruit is ripe yet. Each fruit will only be ripe for a single day. For each fruit, we are given the vertex $v_j$ where it grows, the day $d_j$ on which it will be ripe, and the amount $w_j$ of magic juice we can extract from it if we harvest it when it is ripe.
The fruits have to be harvested by cutting some branches of the tree. On each day, you may cut as many branches of the tree as you like. The parts of the tree you cut off will fall to the ground and you can collect all the ripe fruits they contain. All fruits that fall to the ground when they are not ripe are discarded and no magic juice is collected from them.
Formally, on each day, you may erase some edges of the tree. Whenever you do so, the tree will split into multiple connected components. You then erase all components that do not contain the root and you harvest all ripe fruits those components contained.
Given is a description of the tree together with the locations, ripening days and juiciness of all $m$ fruits. Calculate the maximum total amount of magic juice we can harvest from the tree.
输入格式
The first line contains three space-separated integers $n$ ( $2 \le n \le 100,000$ ), $m$ ( $1 \le m \le n-1$ ) and $k$ ( $1 \le k \le 100,000$ ) – the number of vertices, the number of fruits, and the maximum day on which a fruit may become ripe.
The following $n-1$ lines contain the integers $p_2, \dots, p_n$ , one per line. For each $i$ (from $2$ to $n$ , inclusive), vertex $p_i$ ( $1 \leq p_i \le i-1$ ) is the parent of vertex $i$ .
Each of the last $m$ lines describes one fruit. The $j$ -th of these lines has the form " $v_j\ d_j\ w_j$ " ( $2 \le v_j \le n$ , $1 \le d_j \le k$ , $1 \le w_j \le 10^9$ ).
It is guaranteed that no vertex contains more than one fruit (i.e., the values $v_j$ are distinct).
The following $n-1$ lines contain the integers $p_2, \dots, p_n$ , one per line. For each $i$ (from $2$ to $n$ , inclusive), vertex $p_i$ ( $1 \leq p_i \le i-1$ ) is the parent of vertex $i$ .
Each of the last $m$ lines describes one fruit. The $j$ -th of these lines has the form " $v_j\ d_j\ w_j$ " ( $2 \le v_j \le n$ , $1 \le d_j \le k$ , $1 \le w_j \le 10^9$ ).
It is guaranteed that no vertex contains more than one fruit (i.e., the values $v_j$ are distinct).
输出格式
Output a single line with a single integer, the maximum amount of magic juice we can harvest from the tree.
Scoring
Subtask 1 (6 points): $n, k \leq 20$ , and $w_j = 1$ for all $j$
Subtask 2 (3 points): fruits only grow in the leaves of the tree
Subtask 3 (11 points): $p_i = i-1$ for each $i$ , and $w_j = 1$ for all $j$
Subtask 4 (12 points): $k \leq 2$
Subtask 5 (16 points): $k \leq 20$ , and $w_j = 1$ for all $j$
Subtask 6 (13 points): $m \leq 1,000$
Subtask 7 (22 points): $w_j = 1$ for all $j$
Subtask 8 (17 points): no additional constraints
Scoring
Subtask 1 (6 points): $n, k \leq 20$ , and $w_j = 1$ for all $j$
Subtask 2 (3 points): fruits only grow in the leaves of the tree
Subtask 3 (11 points): $p_i = i-1$ for each $i$ , and $w_j = 1$ for all $j$
Subtask 4 (12 points): $k \leq 2$
Subtask 5 (16 points): $k \leq 20$ , and $w_j = 1$ for all $j$
Subtask 6 (13 points): $m \leq 1,000$
Subtask 7 (22 points): $w_j = 1$ for all $j$
Subtask 8 (17 points): no additional constraints
输入输出样例
输入 #1
6 4 10 1 2 1 4 4 3 4 5 4 7 2 5 4 1 6 9 3
输出 #1
9
In the example input, one optimal solution looks as follows:
- On day 4, cut the edge between vertices 4 and 5 and harvest a ripe fruit with 1 unit of magic juice. On the same day, cut the edge between vertices 1 and 2 and harvest 5 units of magic juice from the ripe fruit in vertex 3.
- On day 7, do nothing. (We could harvest the fruit in vertex 4 that just became ripe, but doing so is not optimal.)
- On day 9, cut the edge between vertices 1 and 4. Discard the fruit in vertex 4 that is no longer ripe, and harvest 3 units of magic juice from the ripe fruit in vertex 6. (Alternately, we could achieve the same effect by cutting the edge between vertices 4 and 6.)
- On day 4, cut the edge between vertices 4 and 5 and harvest a ripe fruit with 1 unit of magic juice. On the same day, cut the edge between vertices 1 and 2 and harvest 5 units of magic juice from the ripe fruit in vertex 3.
- On day 7, do nothing. (We could harvest the fruit in vertex 4 that just became ripe, but doing so is not optimal.)
- On day 9, cut the edge between vertices 1 and 4. Discard the fruit in vertex 4 that is no longer ripe, and harvest 3 units of magic juice from the ripe fruit in vertex 6. (Alternately, we could achieve the same effect by cutting the edge between vertices 4 and 6.)
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted