[树的点分治] [HDU4812] D Tree

题目传送门
(这次英语题应该比较好懂吧……)
大意是

给定一棵有 n 个点的树,每个点有权值 vi ,求是否存在一条路径使得路径上所有点的权值的乘积 mod106+3 k ,输出路径首尾编号,若有多解输出字典序最小的解。

貌似很像不虚就是要AK
现在求路径上点权的乘积,继续点分治,怎么合并答案?
我们已经统计出一棵子树到重心的权值积了,因为这些乘积 m MOD 取余为 K ,再加入的子树的乘积就应为 K×m1 ,所以需要求逆元。
如何确定树上合法的两点?在统计乘积时需要记录一下位置,在加入子树时就可以合并了,利用这个更新答案,然后将这些点插入哈希表中,待下次加入子树时备用。
时间复杂度为 O(Tnlog22n)
Code

猜你喜欢

转载自blog.csdn.net/HeRaNO/article/details/74021029
今日推荐