小d和送外卖
题号:NC249950
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

d是“红易”外卖的一名配送员,负责派送S城的外卖,S城非常奇特,这个城市是一个树形结构——道路均为双向道路并且没有环,并且每一条道路长度为1,其中1号结点也就是根节点是外卖的中转站,题目保证该结点不会有外卖配送的需求(所有的外卖均要由小d从这里取,然后派送给其他用户)。

d负责派送蔬菜等物资,上午由用户在软件上下单成功以后,下午由他统一派送,因此他知道哪家会有订单。但是由于“红易”是一个员工至上的商家(没错,不是顾客至上),他可以因不想配送为由从而拒绝配送m份订单,作为补偿,被拒接的订单不仅全额退款,还可以线上送他们一份赛博蔬菜。

他的外卖卡车可以满足所有的订单配送,也就是仅需一开始装载好所有的货物,然后再去配送,所有送餐地址可以按任意顺序访问,直到他配送完成全部的外卖订单,送完全部的外卖订单以后需要返回中转站结算工钱

由于他希望尽快回家陪女朋友,他希望走过的所有路程最短(访问所有接受申请的订单地点至少一次即可送达),现在给出你哪一些用户在“红易”平台下单,请你输出他的配送路程最短距离和。

输入描述:

第一行输入结点数n \ (3 \leq n \leq 10^5)和可以取消的外卖订单份数 m\ (1 \leq m \leq 50)

接下来n-1行每一行输入两组数据,a\ b(1 \leq a,b \leq n),分别代表编号为ab的两地连一条边。

接下来一行输入一个数k(1\leq k \leq n-1),代表有k份订单。

接下来一行输入k个数b_i (2 \leq b_i \leq n),第i个数代表编号为b_i的地点有外卖订单的配送需求,测试数据保证对于任意i≠j,(1\leq i,j \leq k),b_i\ne b_j

输出描述:

输出一个整数,代表他一天的走过的最短路程和。
示例1

输入

复制
7 1
1 2
1 3
1 4
2 5
2 6
2 7
6
2 3 4 5 6 7

输出

复制
10

说明

可以选择删除5号结点,那么移动顺序就是1 3 1 2 6 2 7 2 1 4 1路程为10