#Y1316. 堆排问题
时间限制2000 ms
内存限制256 MiB
通过率—0 / 0 次提交
题目描述
给定一个 个结点的二叉树,每个结点有个点权,点权互不相同。 再给定种交换方式,每种交换方式形如(),表示一次操作可以选择种交换方式的任意一种,将的点权交换。 求最少多少次交换,可以将原二叉树变为一个满足大根堆性质的二叉树(父亲的点权是以它为根的子树中最大的)。
输入
第一行,两个整数 , 。 第二行,个整数 ,由空格隔开。表示点的父亲。 对于二叉树的根,用表示。 第三行,个互不相同的整数,由空格隔开。其中 表示点的点权。 接下来行,每行两个整数,表示每种交换方式。
输出
仅一行,一个整数,表示总交换次数的最小值。
输入样例
4 4
0 1 2 3
1 2 3 4
1 2
1 4
2 3
1 3
输出样例
2
提示
【样例输入2】
5 4 3 3 5 5 0 4 8 10 9 3 1 2 2 4 1 3 4 5
【样例输出2】
6
【样例解释】
第一组样例,如下图所示。
最优方案为进行(),()两次交换
第二组样例,如下图所示。
最优方案为依次进行共六次交换。
【数据规模与约定】
本题一共有10 个测试点。
下表是每个测试点的数据规模和约定:
| 测试点编号 | N= | M= | 备注 |
| 1 | 5 | 5 | 无其他限制 |
| 2 | 7 | 6 | |
| 3 | 8 | 10 | 无其他限制 |
| 4 | 9 | 30 | |
| 5 | 10 | 19 | |
| 6 | 13 | 13 | |
| 7 | 16 | 120 | |
| 8 | 10 | 12 | 答案不超过10 |
| 9 | 11 | 17 | |
| 10 | 12 | 20 |
评测数据说明
本题使用按题意独立构造、以独立程序核对的训练数据及公开样例,共7个测试点,非原站或官方原始数据。总分100分。