给出一个树$(n\leq 10^5)$,每条边上写了一个数字,给出一个$p$,求有多少条路径按顺序读出的数字可以被$p$整除。保证$p$与10互质。
这题可以用$dsu$和点分治做。
点分治
显然我们只需要知道如何快速计算一个子树里合理方案树。因为这道题可以路径顺逆读不一样$(14\% 7=p)$但$(41\% !=0)$。定义两个数组$ls[N]$从根节点到叶子节点组成的数字,$rs[N]$从叶子节点到根节点组成的数字。
这部分以$key=ls[i]*inv(10^{len(ls[i])})$$map$进行匹配即可
求逆元部分需要注意!!
因为$gcd(a,p)=1$
然后就是套上点分治的模板就好了
代码
1 | include <iostream> |