#P11159. 【MX-X6-T5】 再生

    ID: 9960 远端评测题 2000ms 512MiB 尝试: 0 已通过: 0 显示难度普及+/提高− 上传者: 标签>组合数学梦熊比赛

【MX-X6-T5】 再生

背景

原题链接:https://oier.team/problems/X6F。


このまま\\ らったった\\ 音に乗って\\ 今きっと世界で僕だけだ\\ 後ろ向きな歌を聴いて\\ 少しだけ\\ 前向きに生きていく

—— 再生 - Nanatsukaze

破碎的点依照破碎的规则进行重组,如此再生的一个结构将会是什么样的呢?

题目描述

现有一棵 nn 个点的有标号有根树,给定其长链剖分得到的 top 数组,请你输出有多少种不同的树可以在长链剖分之后得到该 top 数组。答案对 2005113120051131(质数)取模。

具体来说,对于一棵树 TT,对所有点 uu 定义其树高 huh_u:

  • 如果 uu 是叶子,则 hu=1h_u=1。
  • 否则设 uu 的孩子集合为 SuS_u,则 hu=max⁡v∈Suhv+1h_u=\max\limits_{v\in S_u}h_v + 1。

给定数组 t1⋯nt_{1\cdots n},你需要计算有多少种树满足:

  • 对于根节点 rr,满足 tr=rt_r=r。
  • 对于每一个不是叶子的节点 uu,存在恰好一个孩子 vv 满足 hv+1=huh_v+1=h_u 并且 tv=tut_v=t_u,其他孩子满足 tv=vt_v=v。

模 2005113120051131(质数)。

两棵树不同当且仅当它们的根不同或它们的边集不同。

保证答案不为 0\bf 0,但是不保证答案在模意义下不为 0\bf 0。

输入格式

第一行一个正整数 nn。

接下来一行,nn 个空格分隔的正整数 t1⋯nt_{1\cdots n},表示 top 数组。

输出格式

一行一个整数表示答案对 2005113120051131 取模的值。

5
1 1 1 4 4
2
16
1 2 1 4 1 4 1 4 9 1 1 12 1 1 12 1
7181107

提示

【样例解释 #1】

仅有图中的两种树满足条件。

【数据范围】

对于所有数据,保证 1≤n≤5×1051\leq n\leq 5\times 10^5,1≤ti≤i1\leq t_i\leq i,保证取模前答案不为 00。

捆绑测试,共 5 个 Subtask,具体限制如下所示:

  • Subtask 1(11 pts):ti=1t_i=1。
  • Subtask 2(24 pts):n≤5n\leq 5。
  • Subtask 3(17 pts):n≤16n\leq 16。
  • Subtask 4(22 pts):n≤2×103n\leq 2\times 10^3。
  • Subtask 5(26 pts):无特殊限制。