[JSC2023 Final G] Fusion

[JSC2023 Final G] Fusion

超级厉害的数数题,使我大脑旋转。

考虑最后的答案是个什么样子。注意到因为只会加上 \(1\),所以可以得到答案一定可以表达成如下形式(定义空集的 \(\prod_{i\in S}a_i=1\)):

\[ans=\sum_{S\in \{1,2\cdots n\},S\neq \emptyset} v_S\times \prod_{i\in S}a_i \]

因此我们需要求出有多少个缩边的顺序使得权值被乘起来的点的集合为 \(S\)(即求出 \(v_S\))。

考虑将点分成两种颜色,在 \(S\) 中的点为黑点,其余点为白点,并设黑点点权为原点权,白点点权为 \(1\)操作后的点权为两点点权之积(注意不是题目中的定义),考察一下操作的性质。不难发现一个没有合并过的白点和黑点是无法合并的,因为在原树中该白点的点权不一定为 \(1\),无法将其抹除。

考虑添加对合并操作的限制,可以规定只能同色合并,不能异色合并。但经过了合并的白点是可以进行合并的,所以可以规定两个白点合并可以合并成黑点,不难发现这样是不会算重的。合并方式如图:

QQ_1759049740072

考虑只剩下一个点的时候的求值,这个时候我们只需要将这最后一个点为黑色点的值加上即可。因为此时黑白点已经没有区别,所以在 \(S\) 为空集的时候会算重。

接着考虑对上面描述的合并方式进行 dp,由于操作的无序性,难以构造拓扑序。但可以注意到每个点在最后都会变成黑点,所以可以考虑记录每个点都变成黑点的时间。最终的集合 \(S\) 不能暴力枚举,也要 dp,记 \(s_u\) 表示 \(u\) 的子树大小,设计如下状态:

  1. \(f_u\)

    \(u\) 是最开始就为黑色的点,即需要保留 \(a_u\)

  2. \(g_{u,i}\)

    \(u\) 最开始为白色,在子树中的第 \(i\) 次操作与子树中的点合并第一次变成黑色。(\(1\le i<s_u\)

  3. \(h_{u,i}\)

    \(u\) 最开始为白色,在子树中的第 \(i\) 次操作子树外的点合并第一次变成黑色。(\(0\le i<s_u\)

最终答案显然是 \(f_1+\sum_{i=1}^{n-1}g_{1,i}\)

接下来就是重工业转移了,假设当前子树根节点为 \(u\),合并上来的子树根节点为 \(v\),分类讨论转移。

  1. \(f\)\(f\) 转移到 \(F\)

    两个都在一开始是就是黑色,考虑合并操作在那个位置,直接把两个子树内的操作序列合并即可,转移:

    \[F=f_u\times f_v\times \binom{s_u+s_v-1}{s_v}\times s_v \]

  2. \(f\)\(g\) 转移到 \(F\)

    由于只能黑色和黑色合并,所以合并时必须要 \(g\) 已经变黑,枚举 \(g\) 变黑的时间:

    \[F=f_u\times \sum_{i}g_{v,i}\times (s_u-i)\times \binom{s_u+s_v-1}{s_v} \]

  3. \(g\)\(f\) 转移到 \(G\)

    必须要在 \(u\) 变黑之后缩边,有:

    \[G_i=\sum_{j}g_{u,j}\times f_v\times (s_u-j)\times \binom{i-1}{j-1}\times \binom{s_u+s_v-i-1}{s_u-j} \]

  4. \(g\)\(g\) 转移到 \(G\)

    这个时候就要分类讨论了。

    1. \(u\) 先变黑。

      \[G_i=\sum_{j,k}g_{u,j}\times g_{v,k}\times (s_v-k)\times \binom{i-1}{j-1}\times \binom{s_u+s_v-i-1}{s_u-j-1} \]

      由于 \(u\) 先变黑,所以有限制 \(j-1+k-1\geq i-1\)

    2. \(v\) 先变黑。

      \[G_i=\sum_{j,k}g_{u,j}\times g_{v,k}\times (s_u-j)\times \binom{i-1}{j-1}\times \binom{s_u+s_v-i-1}{s_u-j} \]

  5. \(g\)\(h\) 转移到 \(G\)

    这时候的缩点方式是先把 \(u,v\) 缩成一个白色点,然后把缩出来的点和一个 \(u\) 子树内的点缩点变成黑色点。

    \(u\) 什么时候变成黑色确定之后,\(v\) 也确定了,所以只需枚举一维即可。

    \[G_i=\sum_{j} g_{u,j}\times h_{v,i-j-1}\times j\times \binom{i-1}{j}\times \binom{s_u+s_v-i-1}{s_u-j-1} \]

  6. \(h\)\(f\) 转移到 \(H\)

    \[H_i=\sum_{j}h_{u,j}\times f_v\times (s_u-j)\times \binom{i}{j} \times \binom{s_u+s_v-i-1}{s_u-i} \]

  7. \(h\)\(g\) 转移到 \(G\)

    \(u\)\(v\) 先缩点成白色点,然后和外面的点合并成黑色。

    \[G_i=\sum_{j}h_{u,j}\times g_{v,i-j-1}\times (i-1)\times \binom{i-2}{j}\times \binom{s_u+s_v-i-1}{s_u-1-j} \]

  8. \(h\)\(g\) 转移到 \(H\)

    先把 \(u\) 和其子树外的点合并成黑色,再把 \(v\)\(u\) 合并,分类讨论先后顺序:

    1. \(u\) 先变黑色。

      \[H_i=\sum_{j,k}h_{u,j}\times g_{i,k}\times (s_v-k)\times \binom{i}{j}\times \binom{s_u+s_v-i-1}{s_u-j-1} \]

      此时有 \(i-j+1\le k\)

    2. \(v\) 先变黑色。

      \[H_i=\sum_{j,k}h_{u,j}\times g_{i,k}\times (s_u-j)\times \binom{i}{j}\times \binom{s_u+s_v-i-1}{s_u-j} \]

      此时有 \(k\le i-j\)

  9. \(h\)\(h\) 转移到 \(G\)

    \[G_i=\sum_{j}h_{u,j}\times h_{u,i-j-1}\times \binom{i-1}{j}\times \binom{s_u+s_v-i-1}{s_u-j-1} \]

  10. \(h\)\(h\) 转移到 \(H\)

    先把 \(u,v\) 缩点,然后一起和子树外的点变成黑色。

    \[H_i=\sum_{j}h_{u,j}\times h_{v,i-j-1}\times i\times \binom{i-1}{j}\times \binom{s_u+s_v-1-i}{s_u-1-j} \]

直接 dp ,在转移中需要枚举 \(j,k\) 的位置时直接用前缀和优化一下即可。时间复杂度 \(\operatorname{O}(n^2)\)

code

posted @ 2026-06-08 20:43  caoshurui  阅读(3)  评论(0)    收藏  举报