题目链接:点击打开链接
题意:
给了一棵树
每个点有点权
操作1 : 1 u 表示询问 gcd(Valueof(u), Valueof(v) ) != 1 的所有v 点中深度最大的点
[ v是 path(u, root); && v!=u ]
操作2 : 2 u w 修改点权
思路:
因为操作2的个数不超过50个,所以每次更新点权后都把所有答案预处理一遍。这样回答是O(1), 更新是n*logn*logn
每次在dfs中计算答案和更新素数栈,dfs完子树后就把这个点在栈里删掉,这样就能保证任何时刻栈里存的都是该点到根的路径
==题意看错,开始看成求点权最大的点,其实也可以做,把素数栈维护成单调的就可以了,==据说操作2任意个也可以做。。这就不知道咋搞了。。
#include
#include
#include
#include
#include