지름길
시간 제한3초메모리 제한1024 MB
맨해튼 거리로 이어진 N개 도시의 사슬이 주어질 때, 도로 하나를 추가해 지름을 최소로 만드는 값을 구합니다.
문제
개의 도시가 평면 위의 서로 다른 위치에 있다. 도시는 1부터 까지 정수로 번호가 매겨진다.
도시 와 도시 을 잇는 도로 가 있다(). 도로는 모두 개이다. 도시 의 좌표를 라 하면, 도로 의 길이는 이다.
도시 와 도시 사이의 경로 는 에서 로 이동할 때 지나는 도로들의 집합이다. 경로 의 길이는 에 속한 도로들의 길이의 합이다. 지름은 모든 도시 쌍 사이 최단 경로 길이의 최댓값이다. 위에 주어진 도로에서는 지름이 도시 1과 사이 경로의 길이와 같다.
두 도시를 골라 그 사이에 새 도로 를 하나 건설한다. 가 도시 와 를 잇는다면 길이는 이다. 도시들의 지름이 최소가 되도록 를 정하고, 그 최솟값을 구하라.
구현
다음 함수를 구현한다. 채점 프로그램이 이 함수를 사용해 답을 받는다.
long long shortcut(int N, long long X[], long long Y[]);
N은 도시의 수이다. X[i]와 Y[i]는 도시 i+1의 x좌표와 y좌표이다. 함수는 새 도로가 추가되었을 때 지름의 최솟값을 반환한다.