1 条题解
-
0
自动搬运
来自洛谷,原作者为

迟暮天复明
#ee82ee搬运于
2025-08-24 22:44:13,当前版本为作者最后更新于2023-01-06 16:51:32,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
显然,每次询问的乘积可以表示成 的形式。由于每一条边的边权都不超过 位小数,所以一定可以表示成 的形式,其中 是小数位数。所以,如果我们想要乘积是一个整数,就必须要分子把和分母中所有的 都约分了。
我们发现 ,所以只需要分子中因数 的个数与因数 的个数分别大于或等于分母中因数 和因数 的个数即可。
我们知道每一个边权和点权都可以表示成 的形式。根据上文所说, 对解题无关紧要。所以我们可以对于每一条边和每一个点,计算出各自的 与 的值。那这样,我们就把问题转化为:对于每一次询问,是否对于所有要乘起来的数存在 且 。
上面的式子,我们可以分成两部分计算。一是边权的乘积,二是起始点点权。两者可以分开计算。对于起始点的点权,显然能够计算了。因此我们只需要考虑如何计算树上一条链的答案即可。
怎么计算一条链上的 和 呢?我们可以记 为从树的根节点到节点 的 ,记 为从树的根节点到节点 的 。这样,就得到 $\sum p=f_u+f_v-2f_{\operatorname{lca}(u,v)},\sum q=g_u+g_v-2g_{\operatorname{lca}(u,v)}$。为了得到 数组和 数组的值,我们可以在计算完每一条边各自的 和 之后对这棵树进行一次深度优先遍历。
那么这道题就做完了。注意判断点权为 以及边权为 的情况。我们只要在处理的时候将 看做 即可。
- 1
信息
- ID
- 8268
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者