#106. 蚂蚁爬树

蚂蚁爬树

附加文件

Description

一棵树有 n 个节点,编号为 1 ~ n。树的每条边长都是 1。

一只蚂蚁当前正在 s 节点。它得到了一个指令,指令是一个序列,由 m 个节点编号组成。

蚂蚁要按照以下规则在树上行走:从它所在节点出发,下一个要到达的节点是在指令序列里最靠前并且它还没到过的节点,并且走最短路。

问:当蚂蚁执行完指令后(即指令中所有的节点均已到过),它需要行走的路程最短是多少?

Input

第一行: 三个整数 n m s;

接下来 n-1 行,每行两个整数 u 和 v,表示 u 和 v 之间有一条边;

接下来一行是指令序列,包含 m 个整数。

Output

一个整数,表示蚂蚁完成指令需要行走的最短路程。

Sample Input

5 4 2 
1 2 
2 3 
3 4 
4 5 
4 3 1 5

Sample Output

9

Sample Hint

样例中的树是一条链 1-2-3-4-5

指令序列为 4 3 1 5

开始蚂蚁在 2 号点。

指令序列里最靠前并且没到过的节点是 4 号点。所以蚂蚁从 2 号点出发,经过 3 号点,到达 4 号点,行程为 2;

指令序列里最靠前并且没到过的节点是 1 号点(3 号点虽然比 1 号点靠前,但是在刚才去往 4 号点的路途中已经到过)。所以蚂蚁从 4 号点出发,经过 3 号点和 2 号点,到达 1 号点,行程为 3;

指令序列里只有 5 号点还未到过,所以蚂蚁从 1 号点出发,依次经过 2、3、4 号点,到达 5 号点,行程为 4;

至此,指令完成,蚂蚁的行程为 2 + 3 + 4 = 9。

Data Size

约 15% 的数据:1 <= n <= 1000

100% 的数据:1 <= n <= 500000 , 1 <= s <= n, 1 <= m <= 400000