#CF2122B. 堆的重新排列
堆的重新排列
B. 堆的重新排列
时间限制:1 秒
内存限制:256 兆字节
你被给定 个二进制堆,第 个堆由顶部的 个 和底部的 个 组成。
在一次操作中,你可以取任意一个堆的顶部元素,并将其移动到任意一个堆的任意位置(包括它原来所在的堆)。
计算使得第 个堆变为顶部 个 、底部 个 所需的最小操作次数。
输入
每个测试包含多个测试用例。第一行包含测试用例数 ()。
每个测试用例的描述如下:
第一行包含一个整数 ()——堆的数量。
接下来 行,每行包含四个整数 ()——第 个堆的初始状态和目标状态。
保证存在一系列操作可以将堆变换为目标状态。
保证所有测试用例的 之和不超过 。
输出
对于每个测试用例,输出一个整数——达到目标状态所需的最小操作次数。
样例
输入
3
2
1 3 1 2
1 1 1 2
3
2 0 2 2
0 1 1 0
1 1 0 0
3
1 2 1 2
3 4 3 4
0 0 0 0
输出
2
3
0
说明
第一个测试用例的解在题目描述中给出。
第二个测试用例的最优解如下:
(此处原文未列出具体步骤,但样例输出为 )
第三个测试用例中,所有堆已经处于目标状态。