勤奋又善于思考的小 L 接触了信息学竞赛,开始的学习十分顺利。但是,小 L 对数据结构的掌握实在十分渣渣。
所以,小 L 当时卡在了二叉树。
在计算机科学中,二叉树是每个结点最多有两个子结点的有序树。通常子结点被称作“左孩子”和“右孩子”。二叉树被用作二叉搜索树和二叉堆。随后他又和他人讨论起了二叉搜索树。什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树。设 keyp 表示结点 p 上的数值。对于其中的每个结点 p,若其存在左孩子 lch,则 keyp>keylch;若其存在右孩子 rch,则 keyp<keyrch;注意,本题中的二叉搜索树应满足对于所有结点,其左子树中的 key 小于当前结点的 key,其右子树中的 key 大于当前结点的 key。(因为小 L 十分喜欢装 xx,所以这里他十分装 xx 的给大家介绍了什么是二叉树和二叉搜索树)。
可是善于思考的小 L 不甘于只学习这些基础的东西。他思考了这样一个问题:现在给定一棵二叉树,可以任意修改结点的数值。修改一个结点的数值算作一次修改,且这个结点不能再被修改。若要将其变成一棵二叉搜索树,且任意时刻结点的数值必须是整数(可以是负整数或 0),所要的最少修改次数。
这一定难不倒聪明的你吧!如果你能帮小 L 解决这个问题,也许他会把最后的资产分给你 161 哦!
第一行一个正整数 n 表示二叉树节点数。
第二行 n 个正整数用空格分隔开,第 i 个数 ai 表示结点 i 的原始数值。
此后 n−1 行每行两个非负整数 fa,ch,第 i+2 行描述结点 i+1 的父亲编号 fa,以及父子关系 ch,(ch=0 表示 i+1 为左儿子,ch=1 表示 i+1 为右儿子)。
为了让你稍微减轻些负担,小 L 规定:结点 1 一定是二叉树的根哦!
仅一行包含一个整数,表示最少的修改次数
对于 20% 的数据:n≤10,ai≤100。
对于 40% 的数据:n≤100,ai≤200。
对于 60% 的数据:n≤2000。
对于 100% 的数据:n≤105,ai≤231。