Description
一棵树,根编号1,原始带权,到第i+1天变为第i天子树节点的异或和。
求 第x天 根编号
Solution
对于一棵树,子树节点对根节点的贡献只与其深度有关
进一步,第i天深度为j的子节点对根的贡献为第i-1天所有子树对根节点的贡献(第i-1天所有子树关深度于j节点的系数在第i天叠加),即
(定义根节点深度为0,是为了方便式子的转化)
发现每一步递推决策为当前步选[0,j]和上一步组成j的方案数
则此递推式的含义可为,i个未知数(可以为零)和为j的方案数
故可直接得出
而又因为贡献是异或和,所以只关心系数的奇偶性
即当且只当此时系数为奇时,此深度节点会对根节点造成贡献
即关心
根据Lucas定理:
而又
可知条件满足的充分必要条件是:n&m==m
(m/2,n/2可以理解为它们整体二进制右移,则Lucas定理则是在比较它们的每一个二进制位)
所以我们得到,当 n+m-1&n-1=n-1 深度m的点会在第n天造成贡献
即当 n-1&m=0
而关注此式的取值范围,它很明显是通过不同深度是否贡献来得到不同取值
所以当
而n-1&m=0的情况完全可以直接枚举n-1的满足条件的子集m去构成答案
则最后答案也就等于
最后一步就是取
Code
1 |
|