#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