DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

yet another mst problem

문제로 돌아가기

해설

1. 옮긴 점의 후보 위치

옮길 점을 rrr번 점이라고 하자. 나머지 점들의 집합을 QQQ라고 하고, 옮긴 뒤의 점을 sss라고 하자.

최적해의 어떤 스패닝 트리를 고정하자. sss와 인접한 점들의 집합을 AAA라고 하면, sss의 위치에 따라 달라지는 비용은 다음과 같다.

∑i∈A∣xs−xi∣+∑i∈A∣ys−yi∣\sum_{i \in A} |x_s-x_i| + \sum_{i \in A} |y_s-y_i|i∈A∑​∣xs​−x

두 합은 독립적이다. 절댓값 합은 중앙값에서 최소가 되므로, 최적의 xsx_sxs​는 AAA에 속한 점 하나의 xxx좌표로, 최적의 ysy_sys​는 에 속한 점 하나의 좌표로 잡을 수 있다.

따라서 QQQ에 나타나는 xxx좌표와 yyy좌표의 모든 조합만 확인하면 충분하다. 후보 위치는 최대 (N−1)2(N-1)^2(N−1)2개이다. N=이면 답은 이다.

2. 남은 점들의 MST 하나만 사용하기

QQQ의 완전 그래프를 GGG라고 하고, 그 MST 하나를 KKK라고 하자. 후보 위치 sss를 추가하면 sss와 QQQ의 모든 점을 잇는 간선들이 새로 생긴다.

GGG의 모든 간선을 다시 사용할 필요는 없다. KKK의 간선과 sss에서 나가는 간선만으로도 확장된 그래프의 MST를 만들 수 있다.

이를 보이기 위해, 확장된 그래프의 MST 가운데 KKK에 속하지 않는 기존 간선의 수가 최소인 것을 고르자. 그런 간선 eee가 남아 있다고 하자. KKK에서 eee의 양 끝점을 잇는 경로의 모든 간선 중 최댓값은 eee의 가중치 이하이다. MST에서 eee를 지워 생기는 절단을 이 경로가 가로지르므로, 그 절단을 가로지르는 의 간선 가 존재한다. 대신 를 넣으면 가중치는 증가하지 않고 밖의 기존 간선 수가 줄어 모순이다.

따라서 각 후보 위치에서는 정점이 ∣Q∣+1|Q|+1∣Q∣+1개이고 간선이 2∣Q∣−12|Q|-12∣Q∣−1개인 그래프에 크루스칼 알고리즘을 적용하면 된다.

3. 새 간선을 선형 시간에 정렬하기

KKK의 간선은 옮길 점 rrr을 고정한 동안 변하지 않으므로 한 번만 정렬한다. 후보 위치를 (X,Y)(X,Y)(X,Y)라고 하자. QQQ의 점을 다음 네 영역으로 나눈다.

  • xi≤Xx_i \leq Xxi​≤X, yi≤Yy_i \leq Yyi​≤Y: 거리는 이므로 의 내림차순이다.

각 기준으로 점들을 미리 정렬한다. 한 후보 위치에서 각 정렬을 순회하며 해당 영역의 점만 남기면, sss에서 나가는 간선은 네 개의 정렬된 열로 표현된다. 네 열과 정렬된 KKK의 간선을 동시에 병합하면서 크루스칼 알고리즘을 수행할 수 있다. 한 후보 위치의 계산량은 O(N)O(N)O(N)이다.

4. 전체 알고리즘

각 옮길 점 rrr에 대해 다음을 수행한다.

  • QQQ의 맨해튼 완전 그래프에서 프림 알고리즘으로 MST KKK를 구한다.
  • QQQ의 서로 다른 xxx좌표와 yyy좌표의 모든 조합을 후보 위치로 확인한다.
  • 각 후보에서 KKK의 간선과 에서 나가는 간선을 병합하여 크루스칼 알고리즘을 수행한다.

첫 번째 관찰에 의해 어떤 최적해의 옮긴 위치가 후보에 포함된다. 두 번째 관찰에 의해 그 후보의 MST는 KKK와 새 간선만으로 정확히 계산된다. 모든 옮길 점을 확인하므로 알고리즘이 구한 최솟값이 정답이다.

옮길 점 하나마다 후보가 O(N2)O(N^2)O(N2)개이고 후보 하나를 O(N)O(N)O(N)에 처리한다. 모든 옮길 점을 확인하므로 시간 복잡도는 O(N4)O(N^4)O(N4)이고, 메모리 복잡도는 이다.

Solution written by GPT5.6

i​
∣
+
i∈A∑​∣ys​−
yi​∣
AAA
yyy
1N=1
N=1
000
KK
K
fff
eee
fff
KKK
X+Y−(xi+yi)X+Y-(x_i+y_i)
X+Y−(xi​+yi​)
xi+yix_i+y_ixi​+yi​
  • xi≤Xx_i \leq Xxi​≤X, yi>Yy_i > Yyi​>Y: 거리는 X−Y+(yi−xi)X-Y+(y_i-x_i)X−Y+(yi​−xi​)이므로 yi−xiy_i-x_iyi​−xi​의 오름차순이다.
  • xi>Xx_i > Xxi​>X, yi≤Yy_i \leq Yyi​≤Y: 거리는 −X+Y+(xi−yi)-X+Y+(x_i-y_i)−X+Y+(xi​−yi​)이므로 xi−yix_i-y_ixi​−yi​의 오름차순이다.
  • xi>Xx_i > Xxi​>X, yi>Yy_i > Yyi​>Y: 거리는 −X−Y+(xi+yi)-X-Y+(x_i+y_i)−X−Y+(xi​+yi​)이므로 xi+yix_i+y_ixi​+yi​의 오름차순이다.
  • ss
    s
    O(N2)O(N^2)O(N2)