#T0081. 星轨归位

0

星轨归位

题目背景

天仪阁的星盘上有 N 个星槽,编号 1…N;N 颗星石也编号 1…N,每个槽里恰有一颗星石。 现在的盘面是一个排列:槽 i 中停着星石 p_i。

星轨官想让每颗星石回到同号的星槽(槽 i 中最终是星石 i)。他有两类操作:

  • 换轨(会磨损星石,应尽量少用):任选两颗星石交换位置,每次计 1 次操作。
  • 连桥(预算有限,最多使用 K 次):在某一个“错位环”内部任选一处 原本需要一次换轨才能理顺的相邻错位关系,用一座桥把它直接理顺,计 1 次操作, 且不产生磨损。

把排列按“槽 i 指向槽 p_i”连边,可以分解成若干个互不相交的循环(cycle)。

  • 长度为 1 的循环表示该星石已经归位,不需要操作;
  • 长度为 L(L ≥ 2)的循环,理顺它恰好需要 L−1 次“理顺动作”: 每次动作可以选择用换轨(磨损 +1)或用一座桥替代(不磨损);
  • 每个长度 L 的循环最多能用 L−1 座桥(动作数就这么多),总桥数不得超过 K。

题目描述

给定排列 p 与桥预算 K,输出两行:

  1. 理顺全部星石所需的最少总操作次数(换轨与连桥都算操作);
  2. 在连桥总数不超过 K 的前提下,最少换轨次数(尽量用桥替代换轨)。

输入格式

第一行两个整数 N、K(1 ≤ N ≤ 2×10⁵,0 ≤ K ≤ 2×10⁵)。 第二行 N 个整数 p₁…p_N,为 1…N 的一个排列。

输出格式

两行整数:第一行最少总操作次数;第二行最少剩余换轨次数。

样例输入 #1

5 2
2 3 1 5 4

样例输出 #1

3
1

样例解释 #1

排列有两个循环:(1→2→3→1) 长度 3、(4→5→4) 长度 2。 理顺共需 (3−1)+(2−1)=3 次动作,故总操作数为 3。 桥预算 K=2,可先用 2 座桥替代 2 次换轨,剩余 1 次必须换轨,故最少换轨为 1。

数据范围

  • 1 ≤ N ≤ 2×10⁵,0 ≤ K ≤ 2×10⁵;p 为 1…N 的排列。
  • 恒等排列(全部长度 1)两行答案均为 0。