题目名称 | 408. [NOI 2009]二叉查找树 |
---|---|
输入输出 | treapmod.in/out |
难度等级 | ★★★☆ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | .Xmz 于2010-03-11加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:39, 提交:69, 通过率:56.52% | ||||
瑆の時間~無盡輪迴·林蔭 | 100 | 0.009 s | 3.05 MiB | C++ |
Samle | 100 | 0.041 s | 1.65 MiB | C++ |
Youngsc | 100 | 0.047 s | 0.91 MiB | C++ |
FoolMike | 100 | 0.059 s | 2.24 MiB | C++ |
Owaski | 100 | 0.070 s | 2.22 MiB | C++ |
Hzfengsy | 100 | 0.106 s | 3.69 MiB | C++ |
再见 | 100 | 0.108 s | 3.26 MiB | C++ |
梦恋D | 100 | 0.108 s | 5.37 MiB | C++ |
Link | 100 | 0.123 s | 3.17 MiB | C++ |
thomount | 100 | 0.126 s | 4.11 MiB | C++ |
本题关联比赛 | |||
2022级DP专题练习赛1 |
关于 二叉查找树 的近10条评论(全部评论) | ||||
---|---|---|---|---|
坑点:1. 权值离散化 2.数据值排序 3. 注意开long long
| ||||
膜拜sherc神犇的题解!
| ||||
四楼
Zwoi_只会打表抄代码的蒟蒻
2016-08-17 10:03
4楼
| ||||
sanlou
ZWOI_专业维修评测机
2016-08-17 10:01
3楼
| ||||
二楼
maxinyang
2016-08-16 14:58
2楼
| ||||
沙发
hummertime
2016-08-16 14:57
1楼
|
已知一棵特殊的二叉查找树。根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小。
另一方面,这棵查找树中每个结点都有一个权值,每个结点的权值都比它的儿子结点的权值要小。
已知树中所有结点的数据值各不相同;所有结点的权值也各不相同。这时可得出这样一个有趣的结论:如果能够确定树中每个结点的数据值和权值,那么树的形态便可以唯一确定。因为这样的一棵树可以看成是按照权值从小到大顺序插入结点所得到的、按照数据值排序的二叉查找树。
一个结点在树中的深度定义为它到树根的距离加 $1$。因此树的根结点的深度为 $1$。
每个结点除了数据值和权值以外,还有一个访问频度。我们定义一个结点在树中的访问代价为它的访问频度乘以它在树中的深度。整棵树的访问代价定义为所有结点在树中的访问代价之和。
现在给定每个结点的数据值、权值和访问频度,你可以根据需要修改某些结点的权值,但每次修改你会付出 $K$ 的额外修改代价。你可以把结点的权值改为任何实数,但是修改后所有结点的权值必须仍保持互不相同。现在你要解决的问题是,整棵树的访问代价与额外修改代价的和最小是多少?
输入文件中的第一行为两个正整数 $N,K$。其中 $N$ 表示结点的个数,$K$ 表示每次修改所需的额外修改代价。
接下来的一行为 $N$ 个非负整数,表示每个结点的数据值。
再接下来的一行为 $N$ 个非负整数,表示每个结点的权值。
再接下来的一行为 $N$ 个非负整数,表示每个结点的访问频度。
其中:所有的数据值、权值、访问频度均不超过 $4 \times 10^5$。
输出文件中仅一行为一个数,即你所能得到的整棵树的访问代价与额外修改代价之和的最小值。
4 10 1 2 3 4 1 2 3 4 1 2 3 4
29
输入的原图是上图,它的访问代价是 $1 \times 1+2 \times 2+3 \times 3+4 \times 4=30$。
最佳的修改方案是把输入中的第 $3$ 个结点的权值改成 $0$,得到右图,访问代价是:$1 \times 2+2 \times 3+3 \times 1+4 \times 2=19$,加上额外修改代价 $10$,一共是 $29$。
点击下载样例2
对于 $40\%$ 的数据,满足 $N \leq 30$;
对于 $70\%$ 的数据,满足 $N \leq 50$;
对于 $100\%$ 的数据,满足:$1 \leq N \leq 70$,$1 \leq K \leq 3 \times 10^7$。
NOI 2009