专栏文章

[P10717]【MX-X1-T5】「KDOI-05」简单的树上问题

P10717题解参与者 2已保存评论 3

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
3 条
当前快照
1 份
快照标识符
@mip6v2qv
此快照首次捕获于
2025/12/03 07:07
3 个月前
此快照最后确认于
2025/12/03 07:07
3 个月前
查看原文
讲一个神秘的(如)爆标做法。复杂度为 O(n4kk2)O(n4^kk^2)
首先定 11 为根,考虑 dp,fu,S1,S2f_{u,S1,S2} 代表在 uu 的子树里,S1S1 集合中的虚树经过 ufauu\rightarrow fa_u 的边,S2S2 集合中的虚树完全在 uu 的子树内,此时的概率与 uu 子树中点的贡献的乘积。因为 S1S1S2S2 无交集,所以 (S1,S2)(S1,S2) 可以被状压成一个 kk 位三进制数。
接下来考虑怎么合并一个点的所有子树,先不考虑 uu 这个节点是否被选择,发现我们对于第 ii 选点只有四种情况:ii 不在任何一个子树的 (S1,S2)(S1,S2) 中,ii 在恰好一个子树的 S1S1 中,ii 在多于一个子树的 S1S1 中,ii 恰好在一个子树的 S2S2 中。我们把四种状态分别记为 0/1/2/30/1/2/3,用 kk 位四进制数状压,然后每次新加入一个子树进行合并,对每一位枚举转移情况,去掉不可能的转移可以做到 O(n8k)O(n8^k)
考虑到不存在恰好一个的条件总是比多于一个更好的,于是考虑把情况 22 改写为存在一个子树的 S1S1 中有 ii,把这四个值求出来之后再用类似 iFMT 的方式逐位容斥回原本的形式,容斥中要对这一位为 22 的值减去这一位为 11 的值。
考虑这四个值怎么求,恰好一个的限制容易联想到子集卷积,而存在的限制有容易联想到或卷积。但这两者都提示我们去使用类似 FMT 的做法,同时使用子集卷积中占位多项式的思想。我们对于每一个四进制数的位置映射到一个占位多项式为 hSxih_Sx^{i},其中 hSh_SSS 位置当前的值,iiSS1,31,3 的个数。卷积时先做一遍变体的 FMT,也就是枚举每一位,这一位为 1/2/31/2/3 的分别加上这一位为 00 的多项式,然后对位相乘,最后 iFMT 回去。
接下来考虑如何把 fuf_u 数组改成卷积上 gg 的形式。显然对于 gSg_S,考虑 SS 每一位,若第 ii 位为 00 则不在 S1,S2S1,S2 中,若为 33 则在 S2S2 中,否则在 S1S1 中。
最后考虑如何把卷积出来的结果转化为到 ff 的值。也就是如何确定 uu 出现的集合,以及如何给一棵虚数“封顶”,前者还是可以逐位确定,注意这时 uu 上的 11 可以直接将情况 00 转化为情况 22,后者能封顶当且仅当处于情况 22,然后就做完了。
为什么说(如)爆标呢?因为 k8k \le 8O(4kk2)O(4^kk^2) 的子集卷积好像还真跑不过只 FMT 状态 22,剩下部分暴力 O(6k)O(6^k) 子集卷积,甚至要精细实现才能通过本题。该出加强版 k10k \le 10 同时开大时限了(误)。
细节没懂的可以看代码。

评论

3 条评论,欢迎与作者交流。

正在加载评论...