만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

즐거운 하이킹 코스

면접 대비

시간 제한1초메모리 제한1024 MB

요약
가중치가 있는 트리의 루트 A에서 BFS 순서로 걷고, 자식을 방문할 때마다 부모로 돌아오는 거리를 포함한 총 이동 거리를 구합니다.
난이도

쉬움10점 중 3점

유형
BFS, 트리
정답자
아직 제출이 없습니다

문제

Arup는 하이킹을 좋아한다. 최근 CS I에서 트리를 가르쳤기 때문에, 트리 모양의 등산로를 찾았다. 단순하게 하기 위해 Arup는 트리의 루트를 항상 A라고 부른다. 예를 들어 등산로는 다음과 같을 수 있다:

A
/ | \
/  |  \
/   |   \
B    J    C
/ | \  |    / \
D  E  F I   H  G

Arup는 너비 우선 탐색(BFS)으로 등산로를 걷기로 했다. 단순하게 하기 위해 Arup는 노드의 자식을 알파벳 순서로 방문한다. 위 예시 트리의 BFS 순서는 다음과 같다:

A B C J D E F G H I

하지만 Arup는 곧 깨닫는다. 한 자식에서 형제 노드로 가려면 부모로 다시 돌아가야 한다(자식과 형제 사이에는 직접 연결된 길이 없다). 그래서 위 트리에서 Arup가 실제로 걷는 경로는 다음과 같다:

A-B-A-C-A-J-A-B-D-B-E-B-F-B-A-C-G-C-H-C-A-J-I-J-A

Arup는 등산을 마칠 때 루트로 돌아온다. 의사인 아내가 운동과 건강한 식습관의 이점을 설득했기 때문에, Arup는 이렇게 많이 걷는 것을 개의치 않는다.

트리로 주어진 등산로가 있을 때, 되돌아가는 거리(비용)를 포함해 설명된 BFS 등산의 총 거리(비용)를 구하라.

입력

첫 줄에는 확인할 등산로(트리)의 개수를 나타내는 양의 정수 t가 주어진다. 각 등산로는 분기점과 관심 지점(각각 대문자 한 글자로 표시됨)을 잇는 경로들로 정의된다. 다음 줄에는 트리 노드의 개수(분기점과 관심 지점을 합한 수) n (1 이상 26 이하)이 주어진다. 노드는 처음 n개의 대문자라고 가정한다. 이어지는 n-1개의 줄에는 두 대문자와 그 간선의 길이를 나타내는 양의 정수가 주어진다. 두 대문자는 두 지점 사이에 간선이 있음을 뜻하며, 첫 번째 노드가 부모, 두 번째 노드가 자식이다. 이 세 값은 공백 한 칸으로 구분된다.

Arup는 항상 입구인 A에서 출발한다. A는 입력에 반드시 나타난다.

출력

각 등산로의 시작마다 "Trail #i:"라는 메시지를 그 줄에 단독으로 출력한다. i는 입력에서 등산로의 번호(1부터 시작)이다. 다음 출력 줄에는 "BFS hike will cost b"라는 메시지를 출력한다. b는 Arup의 너비 우선 방식 등산의 총 거리이며, 되돌아가는 비용을 포함해야 한다. 총 거리는 정수 범위에 들어간다고 가정한다.

각 지점에서 Arup는 다음으로 갈 수 있는 지점들을 알파벳 순서대로 방문한다. 각 등산로의 출력 뒤에는 빈 줄을 하나 남긴다.

예제1

  1. 예제 1

    입력
    2
    3
    A B 5
    A C 3
    8
    A B 1
    A C 7
    B D 5
    B E 3
    B F 2
    C G 4
    C H 2
    
    예상 출력
    Trail #1:
    BFS hike will cost 16
    
    Trail #2:
    BFS hike will cost 64