도시에서 가장 높은 산의 정상에 올랐다. 이 소식을 친구 모두에게 알리고 싶은데, 지금 이 순간 같은 자리를 목표로 산을 오르고 있는 친구부터 찾아가기로 했다.
산에는 지점이 N개 있고, 그중 하나가 지금 서 있는 정상이다. 산을 오르는 친구는 저마다 정상이 아닌 서로 다른 지점에 있고, 그 친구를 모두 찾아가려고 한다. 지점 사이는 길로 이어져 있으며, 정상에서 다른 각 지점으로 내려가는 경로, 즉 길을 이어 붙인 순서는 정확히 하나뿐이다. 서로 다른 두 지점에 있는 친구를 모두 만나려면 길을 내려갔다가 다른 길을 올라가고 다시 내려가야 할 수도 있다. 내려가는 것은 쉬워서 체력을 쓰지 않지만, 길을 하나 올라갈 때마다 정해진 양의 체력을 쓴다. 친구를 모두 만난 뒤에는 그 자리에 앉아 쉬면 된다.
예를 들어 지점이 6개인 산에서 정상 1과 지점 2, 정상 1과 지점 3, 지점 2와 지점 4, 지점 3과 지점 5, 지점 3과 지점 6이 각각 길로 이어져 있다고 하자. 친구가 지점 5와 지점 2에 있으면 1 ↓ 2 ↑ 1 ↓ 3 ↓ 5 순서로 움직여 둘 다 만날 수 있다. 여기서 a ↓ b는 지점 a에서 지점 b로 길을 내려가는 것이고, a ↑ b는 지점 a에서 지점 b로 길을 올라가는 것이다. 1 ↓ 3 ↓ 5 ↑ 3 ↑ 1 ↓ 2 순서로 움직여도 된다.
지점을 잇는 길, 각 길을 올라가는 데 드는 체력, 친구가 있는 지점이 주어진다. 정상에서 출발해 친구를 모두 만나는 데 드는 체력의 최솟값을 구하라.
첫째 줄에 지점의 수 N과 산을 오르는 친구의 수 F가 주어진다 (1≤F<N≤105). 지점은 1부터 N까지 서로 다른 정수로 구분하고, 1번이 처음 서 있는 정상이다.
다음 N−1개 줄에는 길 하나를 나타내는 정수 A, B, C가 주어진다. 지점 A에서 지점 B로 내려가는 길이 있고, 이 길을 올라가는 데 체력 C가 든다는 뜻이다 (1≤A≤N, 2≤B≤N, A=B, 1≤C≤100).
마지막 줄에는 친구가 있는 지점을 나타내는 서로 다른 정수 L1,L2,…,LF가 주어진다 (2≤Li≤N). 정상에서 다른 각 지점으로 내려가는 경로가 정확히 하나뿐이라고 가정해도 된다.
정상에서 출발해 친구를 모두 만나는 데 드는 체력의 최솟값을 한 줄에 출력한다.