Victor and Proposition

Accepts: 2
Submissions: 22
Time Limit: 12000/6000 MS (Java/Others)
Memory Limit: 524288/524288 K (Java/Others)
问题描述
Victor最开始的时候有一个命题,这个命题衍生出了很多命题,然后每个命题继续衍生,一直到无法衍生为止,Victor一共收获了$n$个命题,这些命题形成了一棵以$1$为根的有根树。

我们定义最开始的命题(标号为$1$)为第零代命题,其衍生出来的命题为第一代命题,第一代命题继续衍生出来的命题为第二代命题,以此类推。命题与命题之间有着一些关系,一个命题$i$将会是命题$x_i$以及其衍生出来的与其代数相差不超过$d_i$的所有命题的充分条件。

注意:$a$衍生出$b$不代表$a$就是$b$的充分条件,也不代表$b$就是$a$的充分条件。

现在,请你回答满足$1\leq i < j\leq n$,且命题$i$与命题$j$互为充要条件的二元组$(i,j)$的个数。

关于充分条件和充要条件,请看http://baike.baidu.com/view/656995.htm
输入描述
第一行包含一个整数$T$,表示测试数据的组数。

每组测试数据的第一行有一个整数$n$,表示命题的个数。

接下来一行有$n-1$个数,第$i$个数$f_{i+1}$表示第$i+1$个命题是由$f_{i+1}$这个命题直接衍生出来的(保证$f_i < i$)。

之后一共有$n$行,每行两个数$x_i$和$d_i$,表示第$i$个命题是命题$x_i$以及其衍生出来的与其代数相差不超过$d_i$的所有命题的充分条件。

$1\leq T\leq 5$。

$2\leq n\leq 100000$。

$0\leq d_i < n$。
输出描述
每组测试数据输出一行一个整数,即互为充要条件的二元组$(i,j)$的个数。
输入样例
1
4
1 2 1
2 1
1 0
4 0
2 0
输出样例
6
Hint
If you need a larger stack size,
please use #pragma comment(linker, "/STACK:102400000,102400000") and submit your solution using C++.