아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

밧줄에 묶인 베시

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

요약
왼쪽에 일직선으로 놓인 최대 10개의 말뚝과 닫힌 밧줄 고리가 주어질 때, 밧줄을 오른쪽으로 자유롭게 빼낼 수 있도록 제거해야 할 말뚝의 최소 개수를 구한다.
난이도

어려움10점 중 9점

유형
기하, 그래프, 백트래킹, 분할 정복
정답자
아직 제출이 없습니다

문제

젖소 베시는 농장에서 말썽을 부리는 것을 세상에서 가장 좋아한다. 베시가 지나치게 사고를 치지 못하도록, 농부 존은 긴 밧줄로 베시를 울타리에 묶어 두기로 했다.

위에서 내려다보면, 울타리는 하나의 수직선 위에 놓인 NN개의 기둥(1≤N≤101 \le N \le 10)으로 이루어져 있고, 베시는 이 수직선의 오른쪽에 있는 위치 (bx,by)(bx, by)에 서 있다. 밧줄은 MM개의 선분(3≤M≤100003 \le M \le 10000)의 나열로 주어진다. 첫 번째 선분은 베시의 위치에서 시작하고 마지막 선분은 베시의 위치에서 끝나므로, 밧줄은 하나의 닫힌 고리를 이룬다. 어떤 기둥도 선분 위에 놓여 있지 않지만, 선분끼리는 서로 교차할 수 있고 끝점을 공유할 수도 있다.

베시를 탈출시키기 위해, 다른 소들이 헛간에서 톱을 가져왔다. 베시가 밧줄에서 풀려나 — 즉 남은 어떤 기둥에도 밧줄이 걸리지 않고 오른쪽으로 달아날 수 있으려면 — 잘라서 없애야 하는 기둥의 최소 개수를 구하라.

모든 기둥의 xx좌표는 같으며, bxbx는 그 값보다 크다(기둥들의 오른쪽에 위치). 모든 좌표(기둥, 베시, 각 선분의 끝점)는 0≤x,y≤100000 \le x, y \le 10000 범위의 정수이다.

입력

  • 첫째 줄: 공백으로 구분된 네 정수 NN, MM, bxbx, byby.
  • 다음 NN개의 줄: i+1i+1번째 줄에는 ii번째 기둥의 xx좌표와 yy좌표가 공백으로 구분되어 주어진다.
  • 다음 M+1M+1개의 줄: 각 줄에는 밧줄 위의 점의 xx좌표와 yy좌표가 순서대로 공백으로 구분되어 주어진다. 이 점들 중 첫 번째와 마지막은 모두 베시의 위치 (bx,by)(bx, by)와 같다.

출력

  • 베시가 오른쪽으로 달아나 탈출할 수 있도록 없애야 하는 기둥의 최소 개수를 정수 하나로 출력한다.

힌트

기둥 하나는 밧줄이 실제로 그 기둥을 감고 있을 때에만 베시를 붙잡는다. 그러나 여러 기둥은 밧줄이 각각의 기둥을 하나도 감고 있지 않더라도 함께 베시를 가둘 수 있다. 밧줄이 기둥들 사이를 왔다 갔다 하며 얽힐 수 있기 때문이다. 따라서 답은 단순히 밧줄이 감고 있는 기둥의 개수가 아니다. 밧줄 고리 전체가 오른쪽으로 풀려날 수 있게 만드는, 없애야 하는 가장 작은 기둥 집합을 찾아야 한다.

예제1

  1. 예제 1

    입력
    2 10 6 1
    2 3
    2 1
    6 1
    2 4
    1 1
    2 0
    3 1
    1 3
    5 4
    3 0
    0 1
    3 2
    6 1
    
    예상 출력
    1