만드는 중입니다

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

컨퍼런스 카풀

면접 대비

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

요약
차가 없는 참석자마다 운전자를 한 명씩 배정하여 모든 참석자가 집에 도착하는 시간의 최댓값을 최소화합니다.
난이도

보통10점 중 5점

유형
이분 탐색, 그래프
정답자
아직 제출이 없습니다

문제

컨퍼런스에 참가자가 nn명 있으며, 11번부터 nn번까지 번호가 붙어 있다. 처음 mm명(11번부터 mm번까지)은 행사가 끝난 뒤 집에 갈 차가 있다. 나머지 n−mn - m명은 차가 없어서 처음 mm명의 도움을 받아 집에 간다. 차가 있는 참가자는 m+1m + 1번부터 nn번까지 참가자 중 최대 한 명을 태워 집까지 데려다준 뒤, 자기 집으로 갈 수 있다.

참가자들의 집과 컨퍼런스 장소를 포함한 (n+1)×(n+1)(n+1) \times (n+1) 크기의 거리 행렬 DD가 주어진다. 1≤i≤n1 \le i \le n인 위치 ii는 ii번 참가자의 집이고, 위치 n+1n+1은 컨퍼런스 장소다. D[i][j]D[i][j]는 위치 ii에서 위치 jj까지 이동하는 예상 시간이다.

모든 참가자가 집에 도착할 때까지 걸리는 시간이 최소가 되도록 차가 있는 참가자와 차가 없는 참가자를 짝지어라.

입력

첫 줄에 정수 nn과 mm이 주어진다(1≤n≤5001 \le n \le 500, 1≤m≤n1 \le m \le n). 2m≥n2m \ge n이 보장된다.

이어서 n+1n+1개의 줄에 각각 n+1n+1개의 정수가 주어진다. (i+1)(i+1)번째 줄의 jj번째 수가 D[i][j]D[i][j]다(0≤D[i][j]≤1080 \le D[i][j] \le 10^8). 모든 ii에 대해 D[i][i]=0D[i][i] = 0이고, 모든 ii, jj, kk에 대해 D[i][k]≤D[i][j]+D[j][k]D[i][k] \le D[i][j] + D[j][k]가 성립한다. DD는 대칭이라고 보장되지 않는다.

출력

첫 줄에 모든 참가자가 집에 도착하는 데 걸리는 최소 시간을 출력한다.

이어서 1≤i≤m1 \le i \le m인 각 줄에 음이 아닌 정수 tit_i를 출력한다. ti=0t_i = 0이면 ii번 참가자는 아무도 태우지 않고 바로 집으로 간다. ti>0t_i > 0이면 ii번 참가자는 tit_i번 참가자를 태워 집까지 데려다준 뒤 자기 집으로 간다. 차가 없는 참가자는 정확히 한 대의 차에 타야 한다.

예제1

  1. 예제 1

    입력
    3 2
    0 1 1 2
    2 0 1 3
    4 2 0 4
    4 3 2 0
    
    예상 출력
    4
    0
    3