#2825. 信息传递
信息传递
Background
有 n 个同学(编号 1 到 n)正在玩信息传递游戏,规则如下: 每个人都有一个固定的信息传递对象 —— 编号为 i 的同学,会把所有信息只传给编号为 Tᵢ 的同学(Tᵢ ≠ i,且 Tᵢ ≤ n); 游戏开始时,每人只知道自己的生日; 每一轮中,所有人会同时行动:将自己当前所知的所有生日信息,全部告诉自己的传递对象; 当有人从别人传递的信息中,第一次得知自己的生日时,游戏立刻结束。 请计算这个游戏一共能进行多少轮。
Format
Input
第一行:1 个正整数 n(表示参与游戏的同学总数); 第二行:n 个用空格隔开的正整数 T₁, T₂, ..., Tₙ(Tᵢ 表示编号 i 的同学的传递对象)。
Output
输出一行一个整数,代表游戏能进行的总轮数。
Samples
5
2 4 2 3 1
3
Limitation
1s, 1024KiB for each test case. 样例详细解释 为了清晰理解游戏流程,我们按轮次拆解每个人的信息变化(用 “知道 X 的生日” 表示当前掌握的信息,“→” 表示传递方向): 核心传递关系(先明确每个人的传递对象) 1 号 → 2 号 2 号 → 4 号 3 号 → 2 号 4 号 → 3 号 5 号 → 1 号 初始状态(游戏开始前,第 0 轮) 每个人只知道自己的生日: 1 号:{1};2 号:{2};3 号:{3};4 号:{4};5 号:{5} 此时无人从他人处得知自己生日,游戏开始。 第 1 轮:第一次传递 所有人同时将自己当前的信息传给对象: 1 号 → 2 号:传递 {1} 2 号 → 4 号:传递 {2} 3 号 → 2 号:传递 {3} 4 号 → 3 号:传递 {4} 5 号 → 1 号:传递 {5} 传递后每个人的信息更新 1 号:原有 {1} + 收到 5 号的 {5} → {1,5}(无自己的生日来自他人,继续) 2 号:原有 {2} + 收到 1 号的 {1} + 收到 3 号的 {3} → {1,2,3}(无自己的生日来自他人,继续) 3 号:原有 {3} + 收到 4 号的 {4} → {3,4}(无自己的生日来自他人,继续) 4 号:原有 {4} + 收到 2 号的 {2} → {2,4}(无自己的生日来自他人,继续) 5 号:未收到任何人的信息 → 仍 {5}(继续) 第 1 轮结束,游戏未终止。 第 2 轮:第二次传递 所有人同时传递当前的全部信息: 1 号 → 2 号:传递 {1,5} 2 号 → 4 号:传递 {1,2,3} 3 号 → 2 号:传递 {3,4} 4 号 → 3 号:传递 {2,4} 5 号 → 1 号:传递 {5} 传递后每个人的信息更新 1 号:原有 {1,5} + 收到 5 号的 {5} → {1,5}(无变化,继续) 2 号:原有 {1,2,3} + 收到 1 号的 {1,5} + 收到 3 号的 {3,4} → {1,2,3,4,5}(无自己的生日来自他人,继续) 3 号:原有 {3,4} + 收到 4 号的 {2,4} → {2,3,4}(无自己的生日来自他人,继续) 4 号:原有 {2,4} + 收到 2 号的 {1,2,3} → {1,2,3,4}(无自己的生日来自他人,继续) 5 号:仍 {5}(继续) 第 2 轮结束,游戏未终止。 第 3 轮:第三次传递 所有人同时传递当前的全部信息: 1 号 → 2 号:传递 {1,5} 2 号 → 4 号:传递 {1,2,3,4,5}(包含 4 号的生日) 3 号 → 2 号:传递 {2,3,4}(包含 2 号的生日) 4 号 → 3 号:传递 {1,2,3,4}(包含 3 号的生日) 5 号 → 1 号:传递 {5} 传递后关键触发条件 4 号收到 2 号的信息 {1,2,3,4,5},其中包含自己的生日(4 号),且是从他人(2 号)处得知; 同时,2 号收到 3 号的信息 {2,3,4},包含自己的生日(2 号);3 号收到 4 号的信息 {1,2,3,4},包含自己的生日(3 号); 满足 “有人从别人口中得知自己的生日” 的终止条件,游戏立刻结束。 结论 游戏一共进行了 3 轮,因此输出 3。 数据规模与约定 30% 的数据:n ≤ 200; 60% 的数据:n ≤ 2500; 100% 的数据:n ≤ 2×10⁵.
相关
在下列比赛中: