#CF1843F2. 动态地铁路径

动态地铁路径

动态地铁路径

  • 时间限制:2 秒
  • 内存限制:512 MiB

题目描述

地铁网络是一棵带点权树,每个点权为 −1-1 或 11。初始时只有编号为 11、权值为 11 的顶点。

依次处理两类事件:

  • + v x:新建一个权值为 xx 的顶点,把它与已有顶点 vv 相连。新顶点编号为当前顶点总数加一。
  • ? u v k:询问顶点 uu 到 vv 的简单路径上,是否存在一个连续子段,使子段点权和恰为 kk。子段可以为空,空子段的和为 00。

输入格式

第一行一个整数 tt,表示测试组数。

每组第一行一个整数 nn,表示事件数。接下来 nn 行,每行是上述一种事件。

输出格式

对每个询问输出一行 YES 或 NO。

样例输入 1

1
8
+ 1 -1
? 1 1 2
? 1 2 1
+ 1 1
? 1 3 -1
? 1 1 1
? 1 3 2
? 1 1 0

样例输出 1

NO
YES
NO
YES
YES
YES

样例输入 2

1
7
+ 1 -1
+ 2 -1
+ 2 1
+ 3 -1
? 5 2 2
? 3 1 -1
? 5 4 -3

样例输出 2

NO
YES
YES

数据范围

  • 1≤t≤1041\le t\le10^4;
  • 每组 1≤n≤2×1051\le n\le2\times10^5,所有测试组的 nn 之和不超过 2×1052\times10^5;
  • 新建事件中,父节点已存在且 x∈{−1,1}x\in\{-1,1\};
  • 询问事件中,两个端点均已存在且 −n≤k≤n-n\le k\le n。
子任务编号 分值 特殊限制
1 20 每组 n≤200n\le200
2 40 每组 n≤2000n\le2000
3 无特殊限制

所有测试点相互独立计分。