밧줄에 묶인 베시
시간 제한1초메모리 제한128 MB
왼쪽에 일직선으로 놓인 최대 10개의 말뚝과 닫힌 밧줄 고리가 주어질 때, 밧줄을 오른쪽으로 자유롭게 빼낼 수 있도록 제거해야 할 말뚝의 최소 개수를 구한다.
문제
젖소 베시는 농장에서 말썽을 부리는 것을 세상에서 가장 좋아한다. 베시가 지나치게 사고를 치지 못하도록, 농부 존은 긴 밧줄로 베시를 울타리에 묶어 두기로 했다.
위에서 내려다보면, 울타리는 하나의 수직선 위에 놓인 개의 기둥()으로 이루어져 있고, 베시는 이 수직선의 오른쪽에 있는 위치 에 서 있다. 밧줄은 개의 선분()의 나열로 주어진다. 첫 번째 선분은 베시의 위치에서 시작하고 마지막 선분은 베시의 위치에서 끝나므로, 밧줄은 하나의 닫힌 고리를 이룬다. 어떤 기둥도 선분 위에 놓여 있지 않지만, 선분끼리는 서로 교차할 수 있고 끝점을 공유할 수도 있다.
베시를 탈출시키기 위해, 다른 소들이 헛간에서 톱을 가져왔다. 베시가 밧줄에서 풀려나 — 즉 남은 어떤 기둥에도 밧줄이 걸리지 않고 오른쪽으로 달아날 수 있으려면 — 잘라서 없애야 하는 기둥의 최소 개수를 구하라.
모든 기둥의 좌표는 같으며, 는 그 값보다 크다(기둥들의 오른쪽에 위치). 모든 좌표(기둥, 베시, 각 선분의 끝점)는 범위의 정수이다.
입력
- 첫째 줄: 공백으로 구분된 네 정수 , , , .
- 다음 개의 줄: 번째 줄에는 번째 기둥의 좌표와 좌표가 공백으로 구분되어 주어진다.
- 다음 개의 줄: 각 줄에는 밧줄 위의 점의 좌표와 좌표가 순서대로 공백으로 구분되어 주어진다. 이 점들 중 첫 번째와 마지막은 모두 베시의 위치 와 같다.
출력
- 베시가 오른쪽으로 달아나 탈출할 수 있도록 없애야 하는 기둥의 최소 개수를 정수 하나로 출력한다.
힌트
기둥 하나는 밧줄이 실제로 그 기둥을 감고 있을 때에만 베시를 붙잡는다. 그러나 여러 기둥은 밧줄이 각각의 기둥을 하나도 감고 있지 않더라도 함께 베시를 가둘 수 있다. 밧줄이 기둥들 사이를 왔다 갔다 하며 얽힐 수 있기 때문이다. 따라서 답은 단순히 밧줄이 감고 있는 기둥의 개수가 아니다. 밧줄 고리 전체가 오른쪽으로 풀려날 수 있게 만드는, 없애야 하는 가장 작은 기둥 집합을 찾아야 한다.