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

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

직무 조회

시간 제한3초메모리 제한512 MB

요약
대칭 통신 행렬이 주어질 때, 1부터 n까지의 키로 이진 탐색 트리를 만들어 모든 쌍의 가중 거리 합을 최소화하고 각 노드의 부모를 출력합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 트리, 분할 정복
정답자
아직 제출이 없습니다

문제

줄리아의 친구 nn명은 이사 간 새로운 나라에서 스타트업을 꾸리려고 한다. 이들은 맡은 직무에 따라 1부터 nn까지 번호를 매겼다. 번호는 프런트엔드 업무에 가까운 직무부터 백엔드 업무에 가까운 직무 순서이다. 또한 행렬 cc를 추정했다. cij=cjic_{ij} = c_{ji}는 직무 ii를 맡은 사람과 직무 jj를 맡은 사람 사이에서 월평균 오가는 메시지 수이다.

이제 계층 트리를 만들려고 한다. 이 트리는 이진 트리이며, 각 노드에는 팀원 한 명이 들어간다. 팀의 리더로 뽑힌 팀원은 루트 노드에 들어간다. 리더가 모든 부하 팀원에게 쉽게 닿을 수 있도록, 트리의 각 노드 vv에 대해 다음 조건을 지켜야 한다. vv의 왼쪽 서브트리에 있는 팀원의 번호는 모두 vv보다 작아야 하고, 오른쪽 서브트리에 있는 팀원의 번호는 모두 vv보다 커야 한다.

계층 트리가 정해지면, 직무 ii와 직무 jj를 맡은 사람들은 트리에서 두 노드 사이의 최단 경로를 통해 연락한다. 이 경로의 길이를 dijd_{ij}라고 하자. 그러면 두 사람의 연락 비용은 cij⋅dijc_{ij} \cdot d_{ij}이다.

모든 쌍에 대한 연락 비용의 합 ∑1≤i<j≤ncij⋅dij\sum_{1 \le i < j \le n} c_{ij} \cdot d_{ij}를 최소로 만드는 계층 트리를 찾으시오.

입력

첫 줄에는 스타트업을 조직하는 팀원의 수 nn (1≤n≤2001 \le n \le 200)이 주어진다.

다음 nn개의 줄에는 각각 정수 nn개가 주어진다. ii번째 줄의 jj번째 수는 cijc_{ij}이며, 팀원 ii와 jj 사이에서 월평균 오가는 메시지 수의 추정치이다 (0≤cij≤1090 \le c_{ij} \le 10^9; cij=cjic_{ij} = c_{ji}; cii=0c_{ii} = 0).

출력

연락 비용의 합을 최소로 만드는 계층 트리를 출력한다. 1부터 nn까지 각 팀원에 대해, 부모 노드의 번호를 출력한다. 리더는 0을 출력한다. 최적의 트리가 여러 개라면, 그중 아무거나 하나를 출력하면 된다.

힌트

가능한 최소 총비용은 566⋅1+239⋅1+30⋅1+1⋅2+1⋅2=839566 \cdot 1+239 \cdot 1+30 \cdot 1+1 \cdot 2+1 \cdot 2=839이다:

예제1

  1. 예제 1

    입력
    4
    0 566 1 0
    566 0 239 30
    1 239 0 1
    0 30 1 0
    
    예상 출력
    2 4 2 0