AGC028D Chords

显然不能考虑所有方案,于是考虑每种连通块对答案的贡献。

把环当作序列,线当作区间,两个点之间有边意味着它们对应的区间有交,并且互不包含

由于互不包含的性质,我们就可以进行 dp 了。

\(f_{l,r}\) 表示仅考虑 \([l,r]\) 区间内的连边(也就是说外面没有边伸进来),\(l\)\(r\) 在一个连通块内的方案数。

为什么要这样设状态呢,因为如果让外面有边能够伸进来会算重。考虑一个 \([l',r']\subset [l,r]\)\(f_{l,r}\)\(f_{l',r'}\) 都包括一种方案使得 \(l,r,l',r'\) 在一个连通块内(如果它们初始时没有匹配的点时)。

统计答案就是 \(\sum\limits_{2\mid \text{len}(l,r)}f_{l,r}g_{2n-2k-c(l,r)}\)\(g(i)\)\(i\) 个点两两匹配的方案数,即 \((n-1)!!(2\mid n)\)\(c(l,r)\)\((l,r)\) 内初始时没有匹配的点的个数。含义就是 \([l,r]\) 外面的点随便匹配,内部 \(l,r\) 联通,为 \(l,r\) 所在连通块对答案的贡献。

剩下来的就是区间 dp 板子了。考虑容斥,\([l,r]\) 随便匹配的方案数为 \(g_{c(l,r)}\)。对于 \(l,r\) 不联通的方案,一定存在一个位置使得没有区间覆盖到,枚举最前面满足没有被覆盖的位置 \(k\),不联通的方案即 \(f_{l,k}g_{c(k+1,r)}\)

所以 dp 的式子即:

\[f_{l,r}=g_{c(l,r)}-\sum\limits_{k=l}^{r-1}f_{l,k}g_{c(k+1,r)} \]

这个 dp 是 \(O(n^3)\) 的,做完了。

评测记录。

posted @ 2023-07-20 17:33  Ender_32k  阅读(28)  评论(0编辑  收藏  举报