Genealogy in the trees
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld

题目描述

给定一颗 n 个结点的有根树 (1 号结点为根结点,有 n - 1 条父结点向子结点的有向边) 和 m 个点对 (p_i, q_i) ,接下来你要回答 Q 次询问。

对于每次询问:给定点对 (a, b) ,计算

\sum_{i = 1} ^ m f(p_i, a) \cdot f(b, q_i)

其中 f(u, v) = \begin{cases}<br />1 & u\,\text{可以到达}\,v\\<br />0 & 其它<br />\end{cases}

即有多少个 i 满足: p_i 可以到达 ab 可以到达 q_i

注意,一个结点可以到达它自己和它的所有后代。


输入描述:

第一行包含三个整数 n, m, Q (1 \leq n, m, Q \leq 3\times 10^5),表示树的结点数量、点对数量和询问次数。

接下来 n - 1 行,每行包含两个整数 u, v (1 \leq u, v \leq n),表示树上结点 u 和结点 v 之间有一条边相连,不保证方向

接下来 m 行,第 i 行包含两个整数 p_i, q_i (1 \leq p_i,q_i\leq n),表示树上给定的第 i 个点对为 (p_i, q_i)

接下来 Q 行,第 j 行包含两个整数 a_j, b_j (1 \leq a_j,b_j\leq n),表示第 j 个询问的点对为 (a_j, b_j)

输入数据保证一定构成一棵树。

输出描述:

对于每个询问,在一行输出一个整数表示该次询问的答案。
示例1

输入

复制
5 5 5
1 2
2 3
3 4
3 5
1 3
1 4
1 3
2 5
1 4
4 3
3 5
5 4
4 4
5 4

输出

复制
5
1
2
2
2
示例2

输入

复制
5 5 5
1 2
2 3
3 4
4 5
1 5
1 5
1 5
2 5
3 5
3 1
1 4
5 5
5 4
4 2

输出

复制
5
3
5
5
5

备注:

样例一中,每个询问中符合条件的点对分别为:
  • \{(1, 3), (1, 4), (1, 3), (2, 5), (1, 4)\}
  • \{(2, 5)\}
  • \{(1, 4), (1, 4)\}
  • \{(1, 4), (1, 4)\}
  • \{(1, 4), (1, 4)\}