× 1005 题面更新,请注意。

wls 的树

Accepts: 29
Submissions: 180
Time Limit: 6000/3000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
Problem Description
wls有一棵有根树,其中的点从$1$到$n$标号,其中$1$是树根。每次wls可以执行两种操作中的一个: (1)选定一个点$x$,将以$x$为根的子树变成一条按照编号排序的链,其中编号最大的作为新的子树的根(成为原来$x$的父亲节点的儿子,如果原来$x$没有父亲节点则新的子树的根也没有父亲节点)。 (2)查询两个点之间的最短路径上经过了多少边。
Input
第一行一个整数$t$表示数据组数($t\le10$)。 每组数据第一行一个正整数$n$表示树上的点数($1\le n\le 100000$)。 接下来$n-1$行每行两个$1$到$n$之间的正整数表示一条树边。 接下来一行一个正整数$q$表示询问的个数($1\le q\le 200000$)。 接下来$q$行每行表示一个操作。第一种操作格式为$1\ x$,其中$x$为指定的树根。第二种操作格式为$2\ x\ y$,表示查询从$x$到$y$的路径。
Output
对于每个第二种操作,输出一行一个正整数表示答案。
Sample Input
1
4
1 2
1 3
2 4
2
1 2
2 2 3
Sample Output
3