트리에서 M개의 가족이 각자 다른 N-1개 도시 중 하나를 균등하고 독립적으로 고를 때, 모든 가족이 지나는 도로 수의 기댓값을 구한다.
보통7트리확률DFS아직 제출이 없습니다시간 제한2초메모리 제한512 MBN개의 도시와 N−1개의 도로로 이루어진 나라가 있다. 도시에는 0번부터 N−1번까지 번호가 붙어 있고, 모든 도로는 양방향이며 서로 다른 두 도시를 잇는다.
단순 경로는 도시를 두 개 이상 나열한 수열로, 같은 도시가 두 번 나오지 않고 이웃한 두 도시 사이에는 항상 도로가 있다. 이 나라의 어떤 두 도시 사이에도 단순 경로가 존재한다. 즉, 도로망은 트리다.
이 나라에는 가족이 M개 산다. 가족에는 0번부터 M−1번까지 번호가 붙어 있고, 각 가족은 도시 하나에 산다. 한 도시에 여러 가족이 살아도 된다.
연휴를 맞아 모든 가족이 떠날 도시를 하나씩 골랐다. 고른 도시는 지금 사는 도시와 다르고, 나머지 N−1개의 도시를 고를 확률은 모두 같다. 도시 선택은 가족마다 독립이다. 연휴 동안 각 가족은 사는 도시에서 고른 도시까지 단순 경로를 따라 이동한다.
가족이 무엇을 골랐는지에 따라 모든 가족이 함께 지나는 도로가 생기기도 한다. 그런 도로의 개수를 L이라고 하자. L의 기댓값을 구하는 프로그램을 작성하시오.
첫째 줄에 도시의 수 N과 가족의 수 M이 주어진다. (2≤N≤51, 1≤M≤50)
다음 N−1개의 줄에는 도로가 잇는 두 도시의 번호가 주어진다. 주어지는 도로는 항상 트리를 이룬다.
마지막 줄에는 각 가족이 사는 도시의 번호가 M개 주어진다.
첫째 줄에 L의 기댓값을 소수점 아래 아홉째 자리까지 반올림해서 출력한다. 소수점 아래는 항상 아홉 자리를 모두 채워 쓴다. 기댓값이 정확히 1.5이면 1.500000000을 출력한다.
입력은 기댓값이 소수점 아래 아홉째 자리의 반올림 경계에 놓이지 않도록 주어지므로, 배정밀도 실수로 계산해도 출력이 갈리지 않는다.
도시 셋이 0번, 1번, 2번 순서로 이어져 있고 가족이 하나뿐이며 0번 도시에 산다고 하자. 이 가족은 확률 21로 1번 도시를 골라 도로 하나를 지나고, 확률 21로 2번 도시를 골라 도로 둘을 지난다. 가족이 하나뿐이므로 이 가족이 지나는 도로가 곧 모든 가족이 지나는 도로다. 따라서 기댓값은 21×1+21×2=1.5이다.
같은 나라에 가족이 둘 있고 둘 다 0번 도시에 산다면, 두 가족이 모두 2번 도시를 고를 확률이 41이고 이때 L=2다. 나머지 경우에는 L=1이므로 기댓값은 41×2+43×1=1.25이다.