专栏文章
[P10717]【MX-X1-T5】「KDOI-05」简单的树上问题
P10717题解参与者 2已保存评论 3
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mip6v2qv
- 此快照首次捕获于
- 2025/12/03 07:07 3 个月前
- 此快照最后确认于
- 2025/12/03 07:07 3 个月前
讲一个神秘的(如)爆标做法。复杂度为
首先定 为根,考虑 dp, 代表在 的子树里, 集合中的虚树经过 的边, 集合中的虚树完全在 的子树内,此时的概率与 子树中点的贡献的乘积。因为 与 无交集,所以 可以被状压成一个 位三进制数。
接下来考虑怎么合并一个点的所有子树,先不考虑 这个节点是否被选择,发现我们对于第 选点只有四种情况: 不在任何一个子树的 中, 在恰好一个子树的 中, 在多于一个子树的 中, 恰好在一个子树的 中。我们把四种状态分别记为 ,用 位四进制数状压,然后每次新加入一个子树进行合并,对每一位枚举转移情况,去掉不可能的转移可以做到 。
考虑到不存在,恰好一个的条件总是比多于一个更好的,于是考虑把情况 改写为存在一个子树的 中有 ,把这四个值求出来之后再用类似 iFMT 的方式逐位容斥回原本的形式,容斥中要对这一位为 的值减去这一位为 的值。
考虑这四个值怎么求,恰好一个的限制容易联想到子集卷积,而存在的限制有容易联想到或卷积。但这两者都提示我们去使用类似 FMT 的做法,同时使用子集卷积中占位多项式的思想。我们对于每一个四进制数的位置映射到一个占位多项式为 ,其中 为 位置当前的值, 为 中 的个数。卷积时先做一遍变体的 FMT,也就是枚举每一位,这一位为 的分别加上这一位为 的多项式,然后对位相乘,最后 iFMT 回去。
接下来考虑如何把 数组改成卷积上 的形式。显然对于 ,考虑 每一位,若第 位为 则不在 中,若为 则在 中,否则在 中。
最后考虑如何把卷积出来的结果转化为到 的值。也就是如何确定 出现的集合,以及如何给一棵虚数“封顶”,前者还是可以逐位确定,注意这时 上的 可以直接将情况 转化为情况 ,后者能封顶当且仅当处于情况 ,然后就做完了。
为什么说(如)爆标呢?因为 , 的子集卷积好像还真跑不过只 FMT 状态 ,剩下部分暴力 子集卷积,甚至要精细实现才能通过本题。该出加强版 同时开大时限了(误)。
细节没懂的可以看代码。
相关推荐
评论
共 3 条评论,欢迎与作者交流。
正在加载评论...