[[清华集训2012]串珠子]

[清华集训2012]串珠子


接下来咱们把整道题的主要思路简要地梳理开来。spa


首先,咱们先考虑最经典的问题(这经典吗???):get

旅行商问题class

不,是与之相似的一类问题:给一堆点(有顺序要求),要求有多少种方案数使这 \(n\) 个点构成一张连通图(无自环、重边)。方法

该问题能够经过一下方法解决:总结

考虑补集转化思想,将求全部的连通图的方案转化为全部图的方案\(-\)非连通图的方案。集合

咱们能够定义一个 \(dp(S)\) 表明最终答案( \(S\) 表明点集,下同),\(f(S)\) 表明非连通图的方案,\(g(S)\) 表明总方案数。di

很显然,在该集合中全部的点构成的彻底图的的子图个数是总方案数。co

而对于非连通图而言,咱们能够将点集中的点分为两部分——一部分为连通图、另外一部分瞎搞,只要这两部分互相不连通就能够了。display

只不过为了不重不漏,咱们能够对于任意一个点,考虑它所在的连通图的节点个数进行计数。math

最后咱们有:

\[f(S)=\sum dp(S0)*g(S\setminus S0) \]


回到这道题,咱们能够仿照刚才的想法,补集转化去作。只不过咱们这里的总方案数并非2的整数次幂,而是每条边种数加一后,全部数的乘积后的结果。

对于补集而言,仍然选任意一个点进行分状况计数便可。

最后不用卡常就过了。


总结:

  1. 经典状压问题的变形;

  2. 补集转化。

相关文章
相关标签/搜索