이차원 평면에 개의 도시가 있다. 번째 도시의 위치는 이다. 모든 도시가 서로 연결되도록 도로망을 건설하려고 한다. 도로망은 도시, 추가된 거점 및 이들을 잇는 도로로 이루어진다.
도로망을 건설할 때 다음과 같은 규칙을 지켜야 한다:
- 거점은 평면 위의 점에 위치한다. 거점은 원하는 만큼 추가할 수 있다.
- 도로는 거점과 거점, 거점과 도시 혹은 도시와 도시를 잇는다. 단, 도로는 축 혹은 축에 평행해야 한다.
모든 도시가 서로 연결되어 있다는 것은 임의의 한 도시에서 도로를 통해 거점과 도시를 거쳐 다른 모든 도시에 갈 수 있음을 의미한다.
모든 도시가 서로 연결되도록 도로망을 건설하기 위해 필요한 도로 길이 총합을 최소화하는 프로그램을 작성하라.
입력 형식
첫 줄에 도시의 수를 나타내는 정수 이 주어진다. ()
이어지는 개의 줄의 번째 줄에는 번째 도시의 위치를 나타내는 두 정수 와 가 공백으로 구분되어 주어진다. ()
서로 다른 두 도시가 같은 위치에 있는 경우는 주어지지 않는다.
출력 형식
첫 줄에 모든 도시가 서로 연결되도록 도로망을 건설하기 위해 필요한 도로 길이 총합의 최솟값을 출력한다.
그다음 줄에 도로망을 건설하기 위해 필요한 도로의 수 을 출력한다.
개의 줄에 걸쳐 도로망을 구성하는 도로에 대한 정보를 출력한다. 이중 번째 줄에 네 정수 를 공백으로 구분하여 출력한다. 이는 번째 도로가 에 있는 거점 혹은 도시와 에 있는 거점 혹은 도시를 잇는다는 것을 의미한다. (; ; 또는 )
가능한 모든 입력에 대해 출력 형식을 만족하는 도로망이 존재함을 증명할 수 있다.
예제
입력
5 4 8 3 6 5 4 2 2 7 8
출력
13 7 2 2 2 4 2 4 4 4 4 4 4 6 4 6 4 8 4 8 7 8 3 6 4 6 4 4 5 4
예제 설명

위 그림은 출력 예제의 답을 나타낸다. 검은색 원은 도시를 의미하고, 베이지색 원은 거점을 의미하고, 실선은 도로를 의미한다.
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 4점
종류 2: 6점
종류 3: 12점
;
종류 4: 28점
종류 5: 34점
종류 6: 16점
추가적인 제한 조건이 없음.
실제 도로망을 구성하여 출력하지 않고, 첫 줄에 최솟값만 출력하여 정답과 같으면 50%의 부분 점수를 받는다.
해설
주어진 개의 도시와 , 좌표가 같은 개의 거점만 고려해도 충분하다. 따라서, 아래와 같이 개의 상태를 갖는 DP를 정의할 수 있다.
집합 의 크기가 작은 상태부터 계산하면 의 시간복잡도로 모든 값을 계산할 수 있다.
여기서, 에 속하는 도시가 모두 트리에서 리프 정짐이 되는 최소 가중치의 트리는 항상 제한적인 형태를 가짐을 관찰할 수 있다. 이를 이용하면 DP 상태에서 를 제거할 수 있고, 의 시간복잡도에 문제를 해결할 수 있다.