uoj961

形式化题意:求计算满足以下两个条件的 nn 个标记顶点的有向图的数量:

  1. 图必须是 DAG。
  2. 不存在三个站点 (a,b,c)(a, b, c),使得 aa 无法到达 bbbb 无法到达 cc,且 cc 无法到达 aa

在偏序集理论中,第二个条件等价于要求该偏序集的宽度不超过 22,并且它是一个弱序。

具体来说,满足条件的图的结构可以描述为:顶点被划分为若干个有序的层级 L1,L2,,LkL_1, L_2, \dots, L_k

  • 对于任意 uLi,vLju \in L_i, v \in L_j,如果 i<ji < j,则 uu 可以到达 vv
  • 同一层级 LiL_i 内的顶点之间互不可达。
  • 为了不违背第二个条件,每个层级的大小 Li|L_i| 只能是 1122

考虑 dp,我们需要构建一个有 nn 个顶点的图,可以看作是在 nsn-s 个顶点的合法图上,新增一个大小为 ss (s{1,2}s \in \{1, 2\}) 的顶层。

  • 为了保证连通性,新层级 LnewL_{new} 与紧邻的上一层级 LprevL_{prev} 之间必须全连接(即 LprevL_{prev} 中的每个点到 LnewL_{new} 中的每个点都要有边,或者通过传递性可达,但在 DAG 构造中通常意味着所有 uLprev,vLnewu \in L_{prev}, v \in L_{new} 的边在传递归约中存在)。
  • 新层级 LnewL_{new} 可以接收来自更早层级(L1Lprev1L_{1} \dots L_{prev-1})的任意数量的边。这些边是“选的,因为即使没有直接连边,也可以通过 LprevL_{prev} 间接到达。

定义 dp[i][s]dp[i][s] 为由 ii 个顶点组成,且最后一层大小为 ss 的好图的数量。其中 s{1,2}s \in \{1, 2\}

假设我们要计算 dp[i][s]dp[i][s],我们枚举上一层的大小 prev_s{1,2}prev\_s \in \{1, 2\}

  • s=1s=1 时(M=i1prev_sM = i - 1 - prev\_s):dp[i][1]=(i1)×(dp[i1][1]2(i2)×1+dp[i1][2]2(i3)×1)dp[i][1] = \binom{i}{1} \times \left( dp[i-1][1] \cdot 2^{(i-2) \times 1} + dp[i-1][2] \cdot 2^{(i-3) \times 1} \right)
  • s=2s=2 时(M=i2prev_sM = i - 2 - prev\_s):dp[i][2]=(i2)×(dp[i2][1]2(i3)×2+dp[i2][2]2(i4)×2)dp[i][2] = \binom{i}{2} \times \left( dp[i-2][1] \cdot 2^{(i-3) \times 2} + dp[i-2][2] \cdot 2^{(i-4) \times 2} \right) 即:dp[i][2]=(i2)×(dp[i2][1]22i6+dp[i2][2]22i8)dp[i][2] = \binom{i}{2} \times \left( dp[i-2][1] \cdot 2^{2i-6} + dp[i-2][2] \cdot 2^{2i-8} \right)

答案即为 (dp[n][1]+dp[n][2])(modP)(dp[n][1] + dp[n][2]) \pmod P