题目名称 1535. [ZJOI 2004] 树的果实
输入输出 treesfruits.in/out
难度等级 ★★★
时间限制 2000 ms (2 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatarcstdio 于2014-02-27加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:26, 提交:44, 通过率:59.09%
GravatarHzoi_Hugh 100 0.563 s 4.10 MiB C++
GravatarWilder 100 0.568 s 9.09 MiB C++
Gravatar┭┮﹏┭┮ 100 0.698 s 20.53 MiB C++
Gravatarjacken 100 0.762 s 7.76 MiB C++
GravatarLadyLex 100 0.783 s 4.87 MiB C++
GravatarHzoi_Maple 100 0.852 s 5.65 MiB C++
Gravatar胡嘉兴 100 0.861 s 4.06 MiB C++
GravatarKZNS 100 0.876 s 4.88 MiB C++
Gravatarkemoto 100 0.892 s 10.40 MiB C++
GravatarHzoi_Hugh 100 0.906 s 4.10 MiB C++
本题关联比赛
4043级2023省选练习赛1
关于 树的果实 的近10条评论(全部评论)
神题,树状数组的多种用法
Gravatar┭┮﹏┭┮
2024-02-07 23:16 4楼
树剖套线段树套平衡树果然慢= =
GravatarHzoi_Mafia
2017-10-18 17:47 3楼
重新看了一遍论文,才发现论文中说的方法和何林的那篇不一样。。。。
算了,不想再写一遍了
Gravatarmikumikumi
2015-09-20 23:42 2楼
有意思的一道题……
Gravatarcstdio
2014-02-28 14:49 1楼

1535. [ZJOI 2004] 树的果实

★★★   输入文件:treesfruits.in   输出文件:treesfruits.out   简单对比
时间限制:2 s   内存限制:256 MiB

【题目描述】

森林中生长着许多奇特的果树,它们不仅外形独特,其果实更是可口。这天,两只小虫 $Nileh$ 和 $Nixed$ 决定一起分享一颗果树。他们从早晨一直辛勤工作到下午,终于把这颗果树锯倒。他们观察着这颗果树,果树开始端是露出地面的根部,接着像其他果树一样,有着诸多分叉(如图所示就是一颗果树),在每个分叉处生长着果实,自然 $Nileh$ 和 $Nixed$ 的食物就是这些果实了!他们准备把果树分成两部分,每个虫虫得到各自的一部分,而分果树的方法就是选择一个分叉点,虫虫将他们咬断(自然分叉点上的果实也被扔掉了),这样果树就变成了两个部分(每个部分不一定是连在一起的):分叉点上面的部分和分叉点下面的部分。$Nileh$ 和 $Nixed$ 就会各自选一个部分吃啦!比如对于左边这颗果树,如果他们咬掉蓝色的果子,那么就被分为红色和黄色的两个部分。

考虑到被咬掉的果子会被浪费,他们想尽可能的减少浪费,于是虫虫给每个果子一个美味值,对于每个果子,他们决定计算如果咬掉这个果子,上面部分、下面部分和从树根到这个分叉点的路径中比这个果子更美味的果子各有多少个。他们以此来选择最终要被咬掉的果子是哪一个。遗憾的是果树可能很庞大,而小虫几乎是不会计算的,身为程序员的你帮帮他们吧。

【输入格式】

输入文件第一行一个正整数 $n(n \leq 10^5)$ 表示树的分叉数(包括树根)。

输入文件的第 $i(2 \leq i \leq n)$ 行一个数 $p_i$,表示分叉 $i$ 的上一级分叉的编号 $(p_i<i)$。($1$ 号分叉即树根,它没有上级分叉点)

输入文件的第 $n+i(1 \leq i \leq n)$ 行一个正整数 $a_i$,表示生长在 $i$ 号分叉点上的果实的美味值。(每个果子的美味值不相等)

【输出格式】

输出共 $n$ 行,每行三个数,分别表示咬掉第 $i$ 个果实后上面部分、下面部分、从树根到这个分叉点的路径中比它美味的果实数。

【样例1输入】

4
1
1
2
2
4
1
3

【样例1输出】

2 0 0
0 0 0
0 3 1
0 1 1

【样例2】

点击下载样例2

【数据规模】

对于 $100\%$ 的数据,$n \leq 10^5,a_i<5*10^6$。