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