Description
给定一棵\(n\)个点的树\(T\),以及一个\(n\)个点\(m\)条边的简单无向图\(G\),要求你将\(T\)“镶嵌”在\(G\)中(即求一个两者点集的双射,使得\(T\)中的边能对应成\(G\)中的边),求方案数。
\(n\leq 17\)。
Solution
先考虑一个树形DP……\(f_{i, j}\)表示树中的\(i\)对应图中的\(j\)时,\(i\)所在子树的对应方案数,转移的话就枚举每个儿子对应哪个点就行了。很显然这是一个时间复杂度\(O(n^3)\)的DP,但是很不幸这个算法是可能搞出来多个点对应到一个点的情况……
那么我们考虑容斥,注意到发生重复等价于有图内的点没法被对应,因此问题就转化为图内的任何点都要被对应。我们考虑当对应到的图的点集事全集的时候,至少有零个图内的点无法被对应;如果说对应的图的点集大小为\(n - 1\)时,至少有一个图内的点无法被对应;大小为\(n - 2\)时,至少有两个无法被对应……以此类推。我们最后想要求的是恰好零个点没被对应,这就是一个经典容斥了……
Code
1 |
|