CF1843F2.Omsk Metro (hard version)
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
This is the hard version of the problem. The only difference between the simple and hard versions is that in this version u can take any possible value.
As is known, Omsk is the capital of Berland. Like any capital, Omsk has a well-developed metro system. The Omsk metro consists of a certain number of stations connected by tunnels, and between any two stations there is exactly one path that passes through each of the tunnels no more than once. In other words, the metro is a tree.
To develop the metro and attract residents, the following system is used in Omsk. Each station has its own weight x∈{−1,1} . If the station has a weight of −1 , then when the station is visited by an Omsk resident, a fee of 1 burle is charged. If the weight of the station is 1 , then the Omsk resident is rewarded with 1 burle.
Omsk Metro currently has only one station with number 1 and weight x=1 . Every day, one of the following events occurs:
- A new station with weight x is added to the station with number vi , and it is assigned a number that is one greater than the number of existing stations.
- Alex, who lives in Omsk, wonders: is there a subsegment † (possibly empty) of the path between vertices u and v such that, by traveling along it, exactly k burles can be earned (if k<0 , this means that k burles will have to be spent on travel). In other words, Alex is interested in whether there is such a subsegment of the path that the sum of the weights of the vertices in it is equal to k . Note that the subsegment can be empty, and then the sum is equal to 0 .
You are a friend of Alex, so your task is to answer Alex's questions.
† Subsegment — continuous sequence of elements.
输入格式
The first line contains a single number t ( 1≤t≤104 ) — the number of test cases.
The first line of each test case contains the number n ( 1≤n≤2⋅105 ) — the number of events.
Then there are n lines describing the events. In the i -th line, one of the following options is possible:
- First comes the symbol "+" (without quotes), then two numbers vi and xi ( xi∈{−1,1} , it is also guaranteed that the vertex with number vi exists). In this case, a new station with weight xi is added to the station with number vi .
- First comes the symbol "?" (without quotes), and then three numbers ui , vi , and ki ( −n≤ki≤n ). It is guaranteed that the vertices with numbers ui and vi exist. In this case, it is necessary to determine whether there is a subsegment (possibly empty) of the path between stations ui and vi with a sum of weights exactly equal to ki .
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105 .
输出格式
For each of Alex's questions, output "Yes" (without quotes) if the subsegment described in the condition exists, otherwise output "No" (without quotes).
You can output the answer in any case (for example, the strings "yEs", "yes", "Yes" and "YES" will be recognized as a positive answer).
输入输出样例
输入#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
说明/提示
Explanation of the first sample.
The answer to the second question is "Yes", because there is a path 1 .
In the fourth question, we can choose the 1 path again.
In the fifth query, the answer is "Yes", since there is a path 1−3 .
In the sixth query, we can choose an empty path because the sum of the weights on it is 0 .
It is not difficult to show that there are no paths satisfying the first and third queries.