一个正整数末尾 0 的个数等于其质因数分解中 2 的个数与 5 的个数的较小值。因此只需维护每个节点权值中因子 2 和因子 5 的指数。
每次操作把以 t 为根的子树都乘上 g,等价于给该子树每个节点加上 g 中 2 和 5 的指数。若每次暴力遍历子树,复杂度无法接受。
采用懒标记:操作时只在节点 t 上累加指数,全部操作结束后做一次自顶向下的 DFS,把祖先的标记加到子孙上。这样每个节点得到自己被所有祖先操作影响后的指数。
然后再把每个节点初始权值中的 2、5 指数加进去。最后做一次自底向上的 DFS,把子树内所有节点的指数求和。对每个节点 i,答案就是其子树中 2 的指数和与 5 的指数和的较小值。
有一棵 n 个节点的有根树,根节点编号为 1。节点 i 有一个正整数权值 vali。树上有 n−1 条无向边。
接下来进行 q 次操作。每次操作给定节点 t 与正整数 g,将「以 t 为根的子树」中每个节点的权值都乘上 g。
全部操作结束后,对每个节点 i,考虑以 i 为根的子树中所有节点权值的乘积,求出该乘积十进制表示末尾有多少个 0。
约束条件:
1 到 n 之间。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.