题目 1689

堆排问题

查看题解 ↗GitHub ↗如何评测
题号
1689
时间限制
2000 ms
内存限制
256 MB
来源
信息学奥赛一本通 · 高手训练篇·一、基础算法(高手训练)

【题目描述】

给定一个 NN 个结点的二叉树,每个结点有个点权FiF_i,点权互不相同。 再给定MM种交换方式,每种交换方式形如(ui,viu_i,v_i),表示一次操作可以选择MM种交换方式的任意一种,将ui,viu_i,v_i的点权交换。 求最少多少次交换,可以将原二叉树变为一个满足大根堆性质的二叉树(父亲的点权是以它为根的子树中最大的)。

【输入】

第一行,两个整数 NN, MM。 第二行,NN个整数 R1,R2,…,RNR_1, R_2,…, R_N,由空格隔开。RiR_i表示点ii的父亲。 对于二叉树的根,RiR_i用00表示。 第三行,NN个互不相同的整数F1,F2,…,FNF_1, F_2,…, F_N,由空格隔开。其中 FiF_i表示点ii的点权。 接下来MM行,每行两个整数ui,viu_i,v_i,表示每种交换方式。

【输出】

仅一行,一个整数,表示总交换次数的最小值。

【输入样例】

文本
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

【样例解释】 第一组样例,如下图所示。 题面图片 最优方案为进行(2,32,3),(1,41,4)两次交换 第二组样例,如下图所示。 题面图片
最优方案为依次进行(1,2),(1,3),(1,2),(2,4),(2,5),(2,4)(1,2),(1,3),(1,2),(2,4),(2,5),(2,4)共六次交换。 【数据规模与约定】 本题一共有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
9 11 17
10 12 20

对于100%的数据,1≤Fi≤1001≤F_i≤100。 输入数据保证形成一个二叉树,任何两个点之间至多有一种交换方式,且交换方式不会出现自环。数据保证有解。

文本
5 4 \n3 3 5 5 0 \n4 8 10 9 3 \n1 2 \n2 4 \n1 3 \n4 5
文本
6

数据下载

题目 1689 的公开数据

正在读取文件列表…

常用命令

题目 1689 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。