집기 게임
시간 제한10초메모리 제한256 MB
교차하는 가로 세그먼트와 세로 세그먼트를 짝지어 쌍 개수를 먼저 최대화한 뒤 가중치 곱의 합을 최대화합니다.
- 난이도
보통10점 중 7점
- 유형
- 그래프
- 정답자
- 아직 제출이 없습니다
문제
명우는 집기 게임을 하려고 한다. 규칙은 다음과 같다.
- 좌표평면 위에 여러 개의 가로 선분과 세로 선분이 놓여 있다.
- 어떤 가로 선분과 세로 선분이 만나는 교점을 클릭하면, 그 교점을 이루는 두 선분을 집어갈 수 있다. 집어간 두 선분은 사라진다.
- 모든 선분에는 무게가 있다.
- 무게가 각각 , 인 두 선분을 집어가면 의 점수를 얻는다.
첫 번째 목표는 선분을 최대한 많이 집어가는 것이고, 두 번째 목표는 얻는 점수를 최대로 하는 것이다. 즉, 가장 많은 선분을 집어가는 방법이 여러 가지라면 그중에서 점수가 가장 큰 방법을 택해야 한다.
게임 정보가 주어졌을 때, 집을 수 있는 선분 쌍의 최대 개수와 그때 얻을 수 있는 최대 점수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 가 주어진다.
각 테스트 케이스의 첫째 줄에는 가로 선분의 수 과 세로 선분의 수 이 공백으로 구분되어 주어진다. ()
이어지는 개의 줄에는 각 가로 선분의 정보가 형식으로 주어진다. 와 는 선분의 두 끝 점이고, 는 그 선분의 무게이다. 가로 선분이므로 이다.
이어지는 개의 줄에는 각 세로 선분의 정보가 같은 형식으로 주어지며, 세로 선분이므로 이다.
모든 좌표는 이상 이하의 정수이고, 모든 무게는 이상 이하의 정수이다. 어떤 두 선분도 두 점 이상에서 만나지 않으며, 끝 점에서 만나는 경우도 없다.
출력
각 테스트 케이스마다 두 정수를 한 줄에 공백으로 구분하여 출력한다. 첫 번째 정수는 집을 수 있는 선분 쌍의 최대 개수이고, 두 번째 정수는 그 최대 개수만큼 집어갈 때 얻을 수 있는 최대 점수이다.