uoj 192
题意:给出一个带边权树,求出树上所有路径积为完全平方数的条数。
我们考虑完全平方数的条件,则它的每个质因数出现偶数次
那么我们联想到异或,我们可以记录路径异或值,然后问题转化为多少条路径异或和为0
这里我们可以对每个质因数指定一个Hash值,然后异或起来就行
注意根据生日攻击的原理,权值范围要远大于$n^2$,那么我们$\text{rand}$一个long long 范围的数
具体有一个近似的公式
$$
\sqrt{\frac \pi 2 n}
$$
那么我们预处理$\sqrt{w}$以内的质数,每次枚举质数分解质因数即可,注意数本身是个大质数的情况
然后就可以求多少条路径异或和为0了,这是经典问题,即拆分路径以后做
1、异或–两两消除
2、Hash–暴力不行时想想