#4621. 在传球游戏中最大化函数值

在传球游戏中最大化函数值

题目描述

给你一个长度为 nn 下标从 0 开始的整数数组 receiverreceiver 和一个整数 kk 。

总共有 nn 名玩家,玩家 编号 互不相同,且为 [0,n1][0, n - 1] 中的整数。这些玩家玩一个传球游戏,receiver[i]receiver[i] 表示编号为 ii 的玩家会传球给编号为 receiver[i]receiver[i] 的玩家。玩家可以传球给自己,也就是说 receiver[i]receiver[i] 可能等于 ii 。

你需要从 nn 名玩家中选择一名玩家作为游戏开始时唯一手中有球的玩家,球会被传 恰好 kk 次。

如果选择编号为 xx 的玩家作为开始玩家,定义函数 f(x)f(x) 表示从编号为 xx 的玩家开始,kk 次传球内所有接触过球玩家的编号之  ,如果有玩家多次触球,则 累加多次 。换句话说, $f(x) = x + receiver[x] + receiver[receiver[x]] + ... + receiver^(k)[x]$ 。

你的任务时选择开始玩家 xx ,目的是 最大化 f(x)f(x) 。

请你返回函数的 最大值 。

注意:receiverreceiver 可能含有重复元素。

输入格式

第一行二个整数 nnkk; 接下来的 nn 个空格隔开的整数表示 receiverreceiver 数组的各元素的值,下标从 0 开始。

输出格式

一行一个整数表示答案。

示例 1:

3 4
2 0 1
6
传递次数 传球者编号 接球者编号 x + 所有接球者编号
2
1 2 1 3
2 1 0
3 0 2 5
4 2 1 6

解释:上表展示了从编号为 x = 2 开始的游戏过程。 从表中可知,f(2) 等于 6 。 6 是能得到最大的函数值。

所以输出为 6 。

示例 2:

5 3
1 1 1 2 3
10
传递次数 传球者编号 接球者编号 x + 所有接球者编号
4
1 4 3 7
2 3 2 9
3 2 1 10

解释:上表展示了从编号为 x = 4 开始的游戏过程。 从表中可知,f(4) 等于 10 。 10 是能得到最大的函数值。

所以输出为 10 。

提示:

  • 1<=receiver.length==n<=1051 <= receiver.length == n <= 10^5
  • 0<=receiver[i]<=n10 <= receiver[i] <= n - 1
  • 1<=k<=10101 <= k <= 10^{10}

Source

2836. 在传球游戏中最大化函数值

}