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)\) 的,做完了。