방문 판매 (Hard)
시간 제한2초메모리 제한1024 MB
정해진 규칙으로 방문 순서(사전순 최소 위상 정렬)를 만든 뒤, 선택한 고객의 x와 y 합이 각각 X, Y 이상이 되도록 하는 최소 선택 수와 마지막으로 선택한 고객 번호를 구한다.
문제
SG그룹은 이번에 획기적인 제품 X, Y를 출시했다. SG그룹의 영업 부서에서 외판원으로 일하는 판매왕 레오는 이 두 제품을 주어진 각 할당량 , 만큼 명의 고객의 집을 모두 방문하여 팔아야 한다. 고객마다 번부터 번까지 번호가 주어지고, 번 고객의 집에 방문하여 판매에 성공했을 때 팔 수 있는 제품 X, Y의 양이 각각 , 로 주어진다. 그러나 어떤 고객은 방문하더라도 제품 구매를 거절하여 판매에 실패할 수 있다.
방문 판매를 할 때는 영업 부서에서 정한 매뉴얼에 따라 차례대로 고객을 방문해야 하지만, 매뉴얼을 잃어버린 레오는 전체 방문 순서를 알 수 없어 깊은 고민에 빠졌다. 그러나 기억력이 좋은 레오는 서로 다른 두 고객의 번호의 쌍 개에 대해 어떠한 고객을 먼저 방문해야 하는지 알고 있다. 그래서 레오는 자신의 기억력을 바탕으로 다음과 같은 규칙으로 모든 명의 고객을 방문하기로 결정했다.
- 아직 방문한 적 없는 고객 중 현재 방문 가능한 모든 고객을 방문 후보로 정한다.
- 후보로 고른 모든 고객을 고객 번호가 작은 사람부터 오름차순으로 방문한다.
- 전체 명의 모든 고객을 방문할 때까지 1과 2를 반복한다.
1에서 방문 가능하다는 건 앞서 방문해야 하는 고객이 없거나 그러한 고객을 이미 모두 방문한 경우를 의미한다. 즉, 번 고객보다 먼저 방문해야 하는 고객이 존재하지 않거나 그러한 고객을 이미 모두 방문했으면 번 고객은 방문 후보가 된다.
레오가 판매하면서 가지고 다니는 차에는 제품 X, Y가 부족할 일이 없도록 충분히 많은 양을 채운다.
레오는 이번 방문 판매로 최소 몇 명의 고객에게 두 제품 X, Y를 팔아야 주어진 할당량을 채울 수 있는지 궁금해졌다. 방문 순서를 만족하면서 명의 고객을 모두 방문하여 할당량을 채우기 위해 제품을 구매하도록 만들어야 하는 최소 고객의 수와, 이때 가장 마지막으로 판매에 성공하는 고객 번호를 구해보자.
입력
첫 번째 줄에 레오가 방문해야 하는 고객 수인 , 기억하는 고객의 방문 순서에 관한 정보의 개수인 , 판매해야 하는 두 제품 X, Y의 할당량인 , 가 정수로 주어진다. (, , )
두 번째 줄부터 개의 줄에 걸쳐 레오가 기억하고 있는 방문 순서에 관한 순서쌍인 , 가 차례로 주어진다. 이는 고객 번호가 인 사람을 인 사람보다 먼저 방문해야 한다는 의미이다. 같은 순서쌍은 주어지지 않는다. (, , )
번째 줄부터 개의 줄에 걸쳐 번부터 번 고객까지 각 고객을 방문하여 판매에 성공했을 때 해당 고객이 구입하는 두 제품 X, Y의 양인 와 가 정수로 주어진다. (, )
출력
방문 순서를 만족하면서 명의 모든 고객을 방문하여 할당량을 채우기 위해 제품 판매에 성공해야 하는 최소 고객의 수를 출력한다. 이때 마지막으로 판매에 성공하는 고객의 번호를 그 다음 줄에 출력하는데, 가능한 번호가 여러 개이면 그중 방문 순서가 가장 빠른 고객의 번호를 출력한다.
어떠한 고객이 제품을 구입한다고 하더라도 할당량을 채울 수 없거나, 고객의 방문 순서가 모순되어 명의 모든 고객을 방문할 수 없어서 방문 판매를 마칠 수 없는 경우에는 을 출력한다.