一开始没思路 感觉像是一个树形dp 然而不会
然后看了一眼题解就明白了
一个点的子树 用dfs序表示肯定是一个连续的区间 并且由于有子树的距离限制 可以转化为一个深度的区间
于是每个点都会有一个在二维平面上的标号(x,y) == (编号,深度)
并且每次进行更新一个节点的子树的时候就可以得到一个x的区间和一个y的区间 (实际上这些x是独一无二的 y更像是一个限制的条件)
这样就可以转化成一个二维的平面 每次选择一个矩阵进行颜色的统一更新 询问单点的颜色 做一个延时标记
询问单点的时候可以每次找啊找直到找到这个点 也可以判断一下mark mark一定是最新的历史 如果这个点在这个区间里面并且这个区间有修改历史 那么ans就是mark
不过加了这个优化速度并没有提升多少
在这里kd-tree很像线段树 区别就是维度不同
找了一个小bug就直接a掉了 开心!
#include #include #include #include