A85609.「HNOI2016」树

省选/NOI-

通过率:0%

时间限制:2.00s

内存限制:256MB

题目描述

小 A 想做一棵很大的树,但是他手上的材料有限,只好用点小技巧了。

开始,小 A 只有一棵结点数为NN的树,结点的编号为1,2,,N1,2,\ldots,N,其中结点11为根;我们称这颗树为模板树。小 A 决定通过这棵模板树来构建一颗大树。构建过程如下:

  1. 将模板树复制为初始的大树。
  2. 以下 (2.1) (2.2) (2.3) 步循环执行MM次。
    2.1. 选择两个数字a,ba,b,其中1aN,1b1\leq a\leq N,1\leq b\leq当前大树的结点数。
    2.2. 将模板树中以结点aa为根的子树复制一遍,挂到大树中结点bb的下方 (也就是说,模板树中的结点aa为根的子树复制到大树中后,将成为大树中结点bb的子树)。
    2.3. 将新加入大树的结点按照在模板树中编号的顺序重新编号。例如,假设在进行 (2.2) 步之前大树有LL个结点,模板树中以aa为根的子树共有CC个结点,那么新加入模板树的CC个结点在大树中的编号将是L+1,L+2,,L+CL+1,L+2,\cdots,L+C;大树中这CC个结点编号的大小顺序和模板树中对应的CC个结点的大小顺序是一致的。

下面给出一个实例。假设模板树如下图:

tree1.png

根据第 (1) 步,初始的大树与模板树是相同的。在 (2.1) 步,假设选择了a=4a=4b=3b=3。运行 (2.2) 和 (2.3) 后,得到新的大树如下图所示

tree2.png

现在他想问你,树中一些结点对的距离是多少。

输入格式

第一行三个整数:N,M,QN,M,Q,以空格隔开,NN表示模板树结点数,MM表示第(2)中的循环操作的次数,QQ表示询问数量。
接下来N1N-1行,每行两个整数fr,to\text{fr},\text{to},表示模板树中的一条树边。
再接下来MM行,每行两个整数x,tox,\text{to},表示将模板树中xx为根的子树复制到大树中成为结点to\text{to}的子树的一次操作。
再接下来QQ行,每行两个整数fr,to\text{fr},\text{to},表示询问大树中结点fr\text{fr}to\text{to}之间的距离是多少。

输出格式

输出QQ行,每行一个整数,第ii行是第ii个询问的答案。

输入输出样例

  • 输入#1

    5 2 3
    1 4
    1 3
    4 2
    4 5
    4 3
    3 2
    6 9
    1 8
    5 3

    输出#1

    6
    3
    3

说明/提示

对于100%100\%的数据,N,M,Q100000N,M,Q\leq 100000

首页