题目传送门
(这次英语题应该比较好懂吧……)
大意是
给定一棵有 n n n个点的树,每个点有权值 v i v_i vi,求是否存在一条路径使得路径上所有点的权值的乘积 m o d 1 0 6 + 3 \bmod 10^6+3 mod106+3为 k k k,输出路径首尾编号,若有多解输出字典序最小的解。
貌似很像不虚就是要AK?
现在求路径上点权的乘积,继续点分治,怎么合并答案?
我们已经统计出一棵子树到重心的权值积了,因为这些乘积
m
m
m对
MOD
\text{MOD}
MOD取余为
K
K
K,再加入的子树的乘积就应为
K
×
m
−
1
K\times m^{-1}
K×m−1,所以需要求逆元。
如何确定树上合法的两点?在统计乘积时需要记录一下位置,在加入子树时就可以合并了,利用这个更新答案,然后将这些点插入哈希表中,待下次加入子树时备用。
时间复杂度为
O
(
T
n
log
2
2
n
)
O(Tn\log_2^2n)
O(Tnlog22n)。
Code