해설
각 위치 를 덮는 사용된 폭탄의 수를 라고 하자. 폭탄을 모두 사용한 뒤 번째 높이가 이 되기 위한 필요충분조건은 이다. 따라서 각 폭탄을 최대 한 번 선택하면서 모든 구간 덮기 하한을 만족하는 최소 비용 부분집합을 구하면 된다.
정점 으로 이루어진 최소 비용 유량 그래프를 만든다.
- 각 ()에 대해 간선 를 용량 , 비용 으로 추가한다.
- 각 폭탄 에 대해 간선 를 용량 , 비용 로 추가한다.
정점 에서 정점 으로 정확히 의 유량을 보내는 최소 비용을 구한다. 인 위치가 있으면 용량 를 만들 수 없으므로 즉시 불가능하다.
위치 에 대응하는 컷을 생각하자. 이 컷은 정점 과 정점 을 나눈다. 그래프의 모든 원래 간선은 번호가 작은 정점에서 큰 정점으로 향하므로, 값이 인 유량은 이 컷을 정확히 만큼 통과한다.
간선 가 운반할 수 있는 유량은 최대 이다. 따라서 나머지 유량 중 최소 는 폭탄 간선을 통해 컷을 건너야 한다. 폭탄 간선 가 이 컷을 건너는 것은 정확히 일 때이다. 그러므로 유량이 사용하는 폭탄 간선들은 위치 를 적어도 번 덮는다.
반대로 조건을 만족하는 폭탄 부분집합이 있다고 하자. 선택한 각 폭탄에 서로 다른 하나의 유량 경로를 배정한다. 그 경로는 에서 까지 비용 간선을 지나고, 폭탄 간선 를 지난 뒤, 다시 비용 간선을 따라 으로 간다. 선택하지 않은 나머지 경로는 모든 비용 간선을 지난다.
위치 의 비용 간선을 지나는 경로 수는 이다. 이므로 이며 모든 용량 제한을 만족한다. 따라서 모든 가능한 폭탄 선택은 같은 비용의 값 유량으로 표현할 수 있다.
모든 용량이 정수이므로 최소 비용 유량의 최적해도 정수 유량으로 얻을 수 있다. 용량이 인 폭탄 간선에 유량이 흐르는지를 해당 폭탄의 선택 여부로 해석하면 된다. 두 방향의 대응에서 비용도 정확히 보존되므로 최소 비용 유량의 값이 정답이다.
정점 수는 , 간선 수는 이다. 잠재치를 사용하는 다익스트라 기반 연속 최단 경로 알고리즘으로 최대 번 증강하면 시간 복잡도는 이고, 공간 복잡도는 이다.
Solution written by GPT5.6