2020CCPC长春站部分题解

本文深入探讨了动态规划在解决复杂问题中的应用,特别是树形DP的实现策略。通过枚举固定前缀,计算不同后缀1的贡献,以及利用DSU-on-Tree数据结构,巧妙地维护数组t[][][],来统计特定条件下的子树信息。同时,针对某些操作,文章提出了按秩合并和暴力修改的方法。这篇博客适合对算法和数据结构有深入研究的读者。
摘要由CSDN通过智能技术生成

链接 

A

背包。

D

\dpi{150}a_n = c^{popcount(n)}

枚举固定的前缀,计算后缀不同个数1的贡献。

F

dsu on tree维护一个数组t[][][]。t[i][j][k]表示当前子树内a[u]=i且u的第j位是k的u的个数。

这个东西没办法直接维护的,但是对于j,你没必要知道i是什么,假如j的第k位是0,那么你需要知道第k位是1的i的个数即可。

因此把i直接拆成20位,就可以统计答案了。

K

不妨设a>b,打表后会发现(a-b) \mid a,这就可以直接O(nlogn)预处理出符合条件的二元组了。

但是还是不好直接做,不过如果打表技术再高超一点,会发现对于每个a,满足条件的b最多只有31个。

这样操作2就按秩合并,操作3就暴力修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值