아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

사전

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

요약
최대 50개의 짧은 단어가 주어질 때 모든 단어를 아래쪽 경로에서 읽을 수 있는 간선 표시 트리 중 정점이 가장 적은 경우를 구합니다.
난이도

어려움10점 중 8점

유형
트라이, 문자열 매칭, 동적 계획법, 그래프
정답자
아직 제출이 없습니다

문제

페트르와 드미트리는 새로운 데이터 압축 방식을 만들고 있다. 두 사람이 할 일은 주어진 단어 집합을 압축하는 것이고, 압축 결과물은 뿌리가 있는 트리다. 트리의 각 간선에는 알파벳 소문자가 정확히 하나씩 적혀 있다.

이런 트리가 만들어 내는 사전은 다음과 같이 정의한다. 트리의 정점 하나를 고르고 뿌리에서 멀어지는 방향으로만 내려가는 경로를 따라가면서, 지나간 간선의 문자를 순서대로 이어 붙이면 단어 하나가 나온다. 시작 정점이 뿌리일 필요는 없고, 끝 정점이 잎일 필요도 없다. 이렇게 얻을 수 있는 단어를 모두 모은 것이 그 트리의 사전이다.

두 사람은 사전이 주어진 단어를 모두 포함하는 트리를 만들어야 하고, 그런 트리 중에서 정점 수가 가장 적은 것을 찾고 싶다.

예를 들어 뿌리에서 아래로 간선이 차례로 a, b, c, d인 한 줄짜리 트리는 정점이 5개다. 이 트리의 사전에는 a, ab, abcd, bc, cd, d가 들어 있지만 ba와 ac는 들어 있지 않다.

입력

첫 줄에 단어의 개수 n이 주어진다 (1≤n≤501 \le n \le 50). 다음 n개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 서로 다르고, 비어 있지 않으며, 알파벳 소문자로만 이루어진다. 각 단어의 길이는 10 이하이다.

출력

사전이 주어진 단어 n개를 모두 포함하는 트리 중에서 정점 수의 최솟값을 한 줄에 출력한다.

힌트

north, eastern, european, regional, contest 다섯 단어는 정점 31개짜리 트리에 모두 담긴다. 뿌리에서 contest를 한 줄로 내려쓰고, contest의 e에서 european을 시작해 그 e 간선을 함께 쓰고, european의 ea에서 eastern을 시작하고, european의 마지막 n에서 north를 시작하고, north의 r에서 regional을 시작하면 간선 30개로 다섯 단어가 모두 사전에 들어온다. 다섯 단어의 길이 합이 35이므로 간선 5개를 아낀 셈이다.

예제3

  1. 예제 1

    입력
    5
    north
    eastern
    european
    regional
    contest
    
    예상 출력
    31
    
  2. 예제 2

    입력
    1
    a
    
    예상 출력
    2
    
  3. 예제 3

    입력
    3
    ab
    bc
    cd
    
    예상 출력
    5