CF2078B.Vicious Labyrinth

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Vicious Labyrinth

题目描述

Axium Crisis - ak+q

迷宫中有 nn 个单元格,其中单元格 ii1in1 \leq i \leq n)距离出口有 nin - i 公里。特别地,单元格 nn 就是出口。注意每个单元格仅与出口相连,无法从其他任何单元格直接到达。

每个单元格最初恰好困住一个人。你希望通过在每个单元格 ii1in1 \leq i \leq n)安装传送器来帮助所有人尽可能接近出口,该传送器会将单元格 ii 中的人传送到另一个单元格 aia_i

迷宫主人发现了你的行为。她觉得有趣,但要求你满足以下条件:

  • 每个人都必须恰好使用传送器 kk 次。
  • 任何单元格的传送器都不能将人传送到自身所在的单元格。形式化地说,对所有 1in1 \leq i \leq naiia_i \neq i

你需要找到一个传送器配置方案,在满足迷宫主人限制条件的前提下,使所有人在使用传送器恰好 kk 次后到出口的距离之和最小。若存在多个可行方案,输出任意一个即可。

输入格式

每个测试包含多个测试用例。第一行输入测试用例数 tt1t1041 \le t \le 10^4)。接下来描述每个测试用例。

每个测试用例的第一行包含两个整数 nnkk2n21052 \leq n \leq 2 \cdot 10^51k1091 \leq k \leq 10^9)——迷宫中的单元格数量及参数 kk

保证所有测试用例的 nn 之和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,按顺序输出 nn 个整数——传送器的目标单元格 a1,a2,,ana_1, a_2, \ldots, a_n(需满足 1ain1 \leq a_i \leq naiia_i \neq i)。

说明/提示

第一个测试用例中,每个人的位置变化如下:

  • 传送前:[1,2][1, 2]
  • 第一次传送后:[2,1][2, 1]

距离之和为 (22)+(21)=1(2-2) + (2-1) = 1,这是可能的最小值。

第二个测试用例中,每个人的位置变化如下:

  • 传送前:[1,2,3][1, 2, 3]
  • 第一次传送后:[2,3,2][2, 3, 2]
  • 第二次传送后:[3,2,3][3, 2, 3]

距离之和为 (33)+(32)+(33)=1(3-3) + (3-2) + (3-3) = 1,这是可能的最小值。

翻译由 DeepSeek R1 完成

样例

2
2 1
3 2
2 1
2 3 2

在线编程 IDE

建议全屏模式获得最佳体验