#P16145. [ICPC 2017 NAIPC] Heaps from Trees

[ICPC 2017 NAIPC] Heaps from Trees

题目描述

给定一棵有根树,包含 nn 个节点。节点编号为 1…n1 \dots n,其中节点 1 是根节点。每个节点有一个值 viv_i。

你希望将这棵树转化为一个堆。也就是说,你要选出尽可能多的节点,使得它们满足以下堆性质:对于选出的任意两个节点 ii 和 jj,如果节点 ii 是节点 jj 在树上的祖先,则必须满足 vi>vjv_i > v_j。注意,相等是不允许的。

请计算最多可以选出多少个节点组成这样的子集。该子集不一定要构成一棵子树。

输入格式

每个输入包含单个测试用例。请注意,你的程序可能会在不同输入上多次运行。输入的第一行包含一个整数 nn(1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5),表示树中节点的数量。节点编号为 1…n1 \dots n。

接下来的 nn 行,按顺序描述每个节点。每行包含两个整数 viv_i 和 pip_i,其中 viv_i(0≤vi≤1090 \leq v_i \leq 10^9)是节点的值,pip_i(0≤pi<i0 \leq p_i < i)是其父节点的编号。每个节点的编号都严格大于其父节点的编号。只有根节点 1 满足 p1=0p_1 = 0,因为它没有父节点。对于其他节点(i=2…ni = 2 \dots n),有 1≤pi<i1 \leq p_i < i。

输出格式

输出一个整数,表示满足堆性质的最大子集的节点数。

5
3 0
3 1
3 2
3 3
3 4
1
5
4 0
3 1
2 2
1 3
0 4
5
6
3 0
1 1
2 1
3 1
4 1
5 1
5
11
7 0
8 1
5 1
5 2
4 2
3 2
6 3
6 3
10 4
9 4
11 4
7

提示

翻译由 DeepSeek V3.2 完成