题目链接
题解
设\(f[i][j]\)表示以\(i\)为根的子树,\(i\)一定取,剩余节点必须联通,异或和为\(j\)的方案数
初始化
\(f[i][val[i]] = 1\) 枚举儿子
\(v\)转移
\[f[i][j] = f[i][j] + \sum\limits_{x \; xor \; y = j} f[i][x] \centerdot f[v][y]\] 发现是一个异或卷积的形式
前面相当于和
\(1\)的卷积,后面是和
\(f[v]\)的卷积
\(FWT\)即可优化到\(O(nlogn + nm)\)
我被卡常了QAQ,需要注意一些细节
单独一个
\(1\)做
\(FWT\)是全
\(1\),转移乘
\(f[v][j]\)时
\(+1\)即可
每个
\(f[i]\)做完
\(FWT\)后不立即
\(IFWT\),可以直接参与转移,全部做完后再
\(IFWT\) 循环展开大法好
#include #include #include #include #include #include #include #include #include