#XMOJ10428. 交换灵魂
交换灵魂
说明
输入文件: soul.in 输出文件: soul.out
时间限制: 1 Sec 内存限制: 256 MB
题目描述
有 $N$ 个人,分别被赋予从 $1$ 到 $N$ 的编号。最初,第 $i$ 个人的体内寄宿着自己的灵魂 $i$。
小明是专业人士,他可以执行这样的操作:选择任意两名不同的人,交换这两人体内寄宿的灵魂。
沉浸在这项操作中的小明,已经进行了多次这样的交换。操作的结果是,现在第 $i$ 个人的体内寄宿着灵魂 $D_i$。
此时,小明意识到,再进行 $K$ 次灵魂交换操作后,自己的操作能力就会消失。
他觉得让人们体内寄宿着他人的灵魂就放任不管太过可怜,因此希望让所有人都回到最初的状态——即每个人体内都寄宿着自己的灵魂。
此外,他担心如果还残留着操作能力,会忍不住想要使用,所以希望能恰好用完这 $K$ 次操作机会。
请判定:能否通过恰好 $K$ 次操作,让所有人都回到体内寄宿着自己灵魂的状态。
输入格式
第一行两个整数 $N$ 和 $K$。
第二行 $N$ 个整数 $D_1,D_2,...,D_N$。
输出格式
若能通过恰好 $K$ 次操作让所有人都回到体内寄宿着自己灵魂的状态,则输出 YES,否则输出 NO。
样例
2 1
2 1
YES
样例说明 #1
交换一次正好回到初始状态。
3 2
3 2 1
NO
样例说明 #2
交换一次能够回到初始状态,交换两次不能回到初始状态。
4 2
1 2 3 4
YES
样例说明 #3
目前的状态就是初始状态。任选两个人操作两次,仍然能够回到初始状态。
数据范围
- 对于 12% 的数据,。
- 对于 36% 的数据,。
- 对于 76% 的数据,。
- 对于 100% 的数据,$2 \leq N \leq 200000, \, 1 \leq K \leq 10^{12}, \, 1 \leq D_i \leq N$,保证 1 到 的每个值恰好出现一次。
相关
在下列比赛中: